当前位置: 首页> 财经> 股票 > 街机网页游戏大全_如何免费找精准客户_怎样才能在百度上发布信息_中级经济师考试

街机网页游戏大全_如何免费找精准客户_怎样才能在百度上发布信息_中级经济师考试

时间:2025/7/9 10:47:57来源:https://blog.csdn.net/2301_77129242/article/details/147148651 浏览次数:0次
街机网页游戏大全_如何免费找精准客户_怎样才能在百度上发布信息_中级经济师考试

Spring配置方式演进:从XML到注解,构建灵活高效的开发体系

在Spring框架的演进长河中,配置方式始终是开发者需要掌握的核心技能。从早期XML一统天下的严谨规范,到注解驱动的敏捷开发,再到如今Java Config的优雅实践,配置管理的变革折射出软件开发范式的革新。本文深入剖析XML与注解两种配置范式,既是对传统技术的系统性梳理,亦是对现代Spring生态的前瞻性探索。

文章以"配置维度"为经线,从Bean生命周期、依赖注入到AOP切面编程,层层拆解基础原理;以"实战场景"为纬线,通过多环境配置、条件化加载等企业级案例,对比不同方案的适用边界。特别设计的配置决策树与演进路线图,将帮助开发者在遗留系统改造与云原生架构建设中,精准选择适配的配置策略。

一、基础 Bean 管理

1.1 Bean 生命周期管理

XML 配置详解

<bean id="dataSource" class="com.DataSource" init-method="init" destroy-method="cleanup"><property name="poolSize" value="10"/>
</bean>
  • init-method:指定Bean初始化完成后调用的方法,用于资源准备
  • destroy-method:指定Bean销毁前调用的方法,用于资源清理
  • property:注入基本类型属性值,这里是设置连接池大小

注解配置详解

@Component
public class DataSource implements InitializingBean, DisposableBean {@Overridepublic void afterPropertiesSet() {// 所有属性设置完成后执行}@Overridepublic void destroy() {// Bean销毁时执行}@PreDestroypublic void customDestroy() {// 另一种销毁方式,执行顺序在destroy()之后}
}
  • InitializingBean:接口方式实现初始化逻辑
  • DisposableBean:接口方式实现销毁逻辑
  • @PostConstruct/@PreDestroy:JSR-250标准注解,更灵活的生命周期控制

1.2 延迟初始化

XML 配置详解

<bean id="heavyResource" class="com.HeavyResource" lazy-init="true"/>
  • lazy-init:设置为true时,Bean在第一次被请求时才会初始化,而不是应用启动时

注解配置详解

@Lazy
@Component
public class HeavyResource {// 类级别延迟初始化
}
  • @Lazy:可以标注在类或@Bean方法上,实现延迟加载

二、依赖注入深入

2.1 多实现类注入

XML 配置详解

<bean id="wechatPay" class="com.payment.WechatPay"/>
<bean id="alipay" class="com.payment.Alipay"/><bean id="orderService" class="com.service.OrderService"><property name="paymentService" ref="alipay"/>
</bean>
  • ref:显式指定要注入的Bean名称
  • property:通过setter方法注入依赖

注解配置详解

@Service
public class OrderService {@Qualifier("wechatPay")@Autowiredprivate PaymentService paymentService;
}
  • @Qualifier:当有多个同类型Bean时指定具体实现
  • @Autowired:自动按类型注入,可标注在字段、构造方法或setter方法上

2.2 复杂对象注入

XML 配置详解

<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"><property name="staticMethod" value="com.utils.DateUtil.setTimeZone"/><property name="arguments"><list><value>Asia/Shanghai</value></list></property>
</bean>
  • MethodInvokingFactoryBean:特殊Bean,用于调用静态方法
  • arguments:方法参数列表,支持复杂类型注入

注解配置详解

@Bean
public MethodInvokingFactoryBean configureTimeZone() {MethodInvokingFactoryBean bean = new MethodInvokingFactoryBean();bean.setStaticMethod("com.utils.DateUtil.setTimeZone");bean.setArguments(new Object[]{"Asia/Shanghai"});return bean;
}
  • @Bean方法:通过编程方式创建复杂Bean实例
  • 相比XML更类型安全,IDE支持更好

三、AOP 高级配置

3.1 切入点表达式进阶

XML 配置详解

<aop:pointcut id="daoMethods" expression="execution(* com.dao.*.*(..)) && @annotation(com.annotations.Auditable)"/>
  • execution:匹配方法执行连接点
  • @annotation:限制只匹配带有特定注解的方法
  • &&:组合多个匹配条件

注解配置详解

@Pointcut("execution(* com.dao.*.*(..)) && @annotation(audit)")
public void auditableMethods(Auditable audit) {}@Before("auditableMethods(audit)")
public void logAudit(Auditable audit) {// 可以访问注解参数
}
  • @Pointcut:定义可重用的切入点表达式
  • 注解参数绑定:可以将注解对象作为参数传递给通知方法

3.2 环绕通知实战

XML 配置详解

<aop:around method="timeMonitor" pointcut-ref="serviceMethods"/>
  • aop:around:声明环绕通知
  • pointcut-ref:引用已定义的切入点

注解配置详解

@Around("execution(* com.service.*.*(..))")
public Object timeMonitor(ProceedingJoinPoint joinPoint) throws Throwable {// 前置逻辑Object result = joinPoint.proceed(); // 执行目标方法// 后置逻辑return result;
}
  • ProceedingJoinPoint:提供访问目标方法的能力
  • 完全控制目标方法的执行时机和方式

四、条件化配置实战

4.1 基于属性的条件配置

XML 配置详解

<bean id="cacheService" class="com.cache.${cache.provider}"/>
  • ${}:属性占位符,从外部属性文件读取值

注解配置详解

@ConditionalOnProperty(name = "cache.enable", havingValue = "true")
public class CacheConfig {@ConditionalOnMissingBeanpublic CacheService cacheService() {return new RedisCache();}
}
  • @ConditionalOnProperty:根据配置属性决定是否创建Bean
  • @ConditionalOnMissingBean:当容器中不存在指定类型的Bean时才创建

4.2 多环境邮件配置

XML 配置详解

<beans profile="dev"><bean id="mailSender" class="com.mail.MockMailSender"/>
</beans>
  • profile:定义特定环境下的配置

注解配置详解

@Profile("dev")
public MailSender mockMailSender() {return new MockMailSender();
}
  • @Profile:更简洁的环境隔离方式
  • 可与@Conditional组合实现复杂条件判断

五、扩展功能对比

5.1 国际化配置

XML 配置详解

<bean id="messageSource" class="ResourceBundleMessageSource"><property name="basenames" value="messages,errors"/>
</bean>
  • basenames:指定国际化资源文件基名

注解配置详解

@Bean
public MessageSource messageSource() {ResourceBundleMessageSource source = new ResourceBundleMessageSource();source.setBasenames("messages", "errors");return source;
}
  • 编程式配置更灵活,可以添加额外设置如编码格式

5.2 自定义 Bean 后处理器

XML 配置详解

<bean class="com.processor.CustomBeanPostProcessor"/>
  • 只需声明Bean,Spring会自动识别并应用

注解配置详解

@Component
public class CustomBeanPostProcessor implements BeanPostProcessor {public Object postProcessBeforeInitialization(Object bean, String beanName) {// 可以修改或包装Bean实例return bean;}
}
  • 对容器中所有Bean生效
  • 常用于实现横切关注点如监控、代理等

六、企业级配置方案

6.1 数据源与事务管理

XML 配置详解

<tx:annotation-driven transaction-manager="txManager"/>
  • tx:annotation-driven:启用注解驱动的事务管理

注解配置详解

@EnableTransactionManagement
public class DataSourceConfig {@Beanpublic PlatformTransactionManager txManager() {return new DataSourceTransactionManager(dataSource());}
}
  • @EnableTransactionManagement:替代XML的事务配置
  • 支持更细粒度的配置选项

6.2 安全配置

XML 配置详解

<http auto-config="true"><intercept-url pattern="/admin/**" access="ROLE_ADMIN"/>
</http>
  • intercept-url:定义URL访问控制规则

注解配置详解

protected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/admin/**").hasRole("ADMIN");
}
  • 链式API更直观
  • 更好的类型安全和IDE支持

七、Java 配置最佳实践

@Configuration
@ComponentScan("com")
@EnableAspectJAutoProxy
@EnableTransactionManagement
public class AppConfig {// 集中管理所有Bean定义
}
  • @Configuration:标记为配置类
  • @ComponentScan:替代XML的context:component-scan
  • @EnableXXX:一站式启用各种Spring功能

配置选择建议

  1. 新项目:优先使用Java配置+注解
  2. 遗留系统:逐步将XML迁移到注解
  3. 第三方集成:XML配置可能更简单
  4. 复杂条件:使用@Conditional系列注解
  5. 环境差异:结合@Profile和属性文件

掌握这些配置方式的原理和适用场景,能够根据项目需求灵活选择最合适的配置方案。

八、决策树:选择配置方式的 5 个维度

维度XML 配置适用场景注解配置适用场景
项目规模大型传统项目微服务/新项目
配置灵活性需求需要动态修改固定配置
团队技术栈传统 JavaEE 背景熟悉 Spring 生态
第三方库集成老式库Spring Boot Starter
维护需求长期维护(混合配置)短期项目(纯注解)

附:Spring 配置演进史

版本配置方式特点
Spring 1.xXML 100%繁琐但统一
Spring 2.5引入 @Component 注解开启注解时代
Spring 3.0Java Config 支持可完全替代 XML
Spring 4.0@Conditional 条件配置为 Spring Boot 铺路
Spring Boot自动配置 + 约定优于配置配置工作量减少 70%

学习建议

  1. 从 XML 开始理解 Spring 核心机制
  2. 逐步过渡到注解配置
  3. 最终掌握 Java Config 最佳实践
关键字:街机网页游戏大全_如何免费找精准客户_怎样才能在百度上发布信息_中级经济师考试

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: