spring中新的Java配置支持的核心是@Configuration注解的类和@Bean注解的方法。
@Bean注解用来指定一个方法实例,配置和初始化一个新对象交给IoC容器管理。@Bean和<bean>的功能相同,@Bean注解的方法可以在@Component类中使用,常用在@Configuration类中。
@Configuration注解的类主要是作为bean定义的来源,它允许内部bean依赖通过简单的调用同一类中的其他@Bean方法进行定义。示例如下:
等同于XML配置方式:
<beans>
<bean id="service" class="com.xlws.service.MessageServiceImpl" />
</beans>
1、AnnotationConfigApplicationContext
AnnotationConfigApplicationContext是spring3.0引入的,它既可以接受@Configuration类作为输入,也可以接受@Component类和使用JSR-330元数据注解的类。
当@Configuration类作为输入时,@Configuration类本身作为bean被注册,并且类内所有声明的@Bean方法也被作为bean注册了。当@Component类和使用JSR-330元数据注解的类作为输入时,它们被注册为bean,并被假设为@Autowired或@Inject的DI元数据在类中需要的地方使用。
与使用XML配置作为输入实例化ClassPathXmlApplicationContext的过程类似,当实例化AnnotationConfigApplicationContext时,@Configuration类可能作为输入。这样就可以在spring容器中不使用XML配置。
AnnotationConfigApplicationContext不仅可以与@Configuration类协作使用,任意@Component类和使用JSR-330元数据注解的类都可以作为构造方法的输入。
2、使用register(Class<?>...)编程式构建容器
AnnotationConfigApplicationContext可以使用无参构造方法来实例化,然后使用register()来配置。
3、使用scan(String...)开启组件扫描
或者使用XML的context命名空间声明:
<context:component-scan base-package="com.xlws" />
com.xlws包会被扫描,查找任意@Component注解的类,那些类就会被注册为spring容器的bean。AnnotationConfigApplicationContext暴露出的scan(String...)方法允许相同的组件扫描功能。在调用refresh()时,所有包下的@Bean方法都会被处理并注册为容器中的bean。
4、指定bean的scope
我们可以为使用了@Bean注解的bean定义scope,默认的scope是singleton,可以使用@Scope注解进行覆盖。
5、自定义bean命名
配置类默认使用@Bean方法的名称来作为注册bean的名称,此方法可以被重写,但使用的是name属性。
6、bean描述
可以使用@Description注解来对@Bean添加一个描述。
7、@Import
和spring的XML中使用<import>元素模块化配置一样,@Import注解允许从其他配置类中加载@Bean的配置。
@Configuration
public class ConfigA{
@Bean
public A a() {return new A();}
}
@Configuration
@Import(ConfigA.class)
public class ConfigB{
@Bean
public B b() {return new B();}
}
当实例化上下文时,不需要指定ConfigA.class和ConfigB.class,仅需要ConfigB被显示提供。
ApplicationContext context = new AnnotationConfigApplicationContext(ConfigB.class);
A a = context.getBean(A.class);
B b = context.getBean(B.class);
8、@ImportResource
在@Configuration类作为配置容器主要机制的应用程序中,有必要使用一些XML配置。此时使用@ImportResource来定义XML,既可以实现以Java为中学的方式配置容器,也保持XML最低限度的使用。
jdbc-config.xml配置:
<context:property-placeholder location="classpath:/com/xlws/jdbc.properties" />
--参考文献《Srping5开发大全》
网友评论