戴着假发的程序员出品 抖音ID:戴着假发的程序员 欢迎关注
[查看视频教程]
[1]@Configuration
@Configuration注解表示要给类为配置类。
我们在AppConfig类上方添加@Configuration注解,表示当前类是一个配置类。配置类本身也是spring容器中的一个元素,spring也会加载配置类,并且为其生成对应的BeanDefinition缓存。
一个配置类和一个配置文件是对等。
1 /** 2 * @author 戴着假发的程序员 3 * 4 * @description 5 */ 6 @Configuration 7 public class AppConfig { 8 }
相当于:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans default-autowire="byName" xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://www.springframework.org/schema/beans 5 http://www.springframework.org/schema/beans/spring-beans.xsd"> 6 7 </beans>
你可以在配置类中按照注解的标准注解bean。
当然你可以像配置文件一样在你的工程中添加多个配置类。(多个配置类的使用参见后面的容器创建方式)
注意:@Configuration修饰的类不能是final的。理论上也不能是abstract修饰的。
[2]@Bean
@Bean注解的作用就是给spring容器中注册一个bean对象。
一个@Bean就类似于配置文件中的一个bean标签。(关于@bean的属性,参见后面的@Bean属性详解)
1 //配置 ArticleDAO对象 2 @Bean 3 public IArticleDAO articleDAO(){ 4 return new ArticleDAO(); 5 } 6 //相当于添加了如下的配置 7 //<bean id="articleDAO" class="com.st.dao.IArticleDAO">
@Bean都是写在方法上方的,表示这个方法的返回值对象将会被添加到spring的容器中。很明显通过@Bean的方式添加的对象,创建方式是由我们自己定义的。
@Bean添加的对象在默认情况下,这个bean的id就是对应的方法名。 比如:IArticleDAO对象的id就是articleDAO.
注意:@Bean方法返回值如果是void,则不会进行类注册动作。 @Bean的方法当然也可以是static修饰的。
[3]容器初始化
我们可以像加载配置文件一样加载配置类完成容器创建:
1 ApplicationContext ac = 2 new AnnotationConfigApplicationContext(AppConfig.class);
很明显我们使用的ApplicationContext类的实现类不在是ClassPathXmlApplicationContext类。
这里我们使用AnnotationConfigApplicationContext类,传入的参数是配置类的Class对象。
当然我们还可以这样使用:
1 public AnnotationConfigApplicationContext(org.springframework.beans.factory.support.DefaultListableBeanFactory beanFactory) { /* compiled code */ } 2 3 public AnnotationConfigApplicationContext(java.lang.Class<?>... annotatedClasses) { /* compiled code */ }
我们可以在创建AnnotationConfigApplicationContext时传入不同的参数:
beanFactory:我们可以传入一个beanFactory对象(关于beanFactory参看beanFactory的详解)
class类型的可变参数:如果我们有多个配置类,我们可以传入一个或者多个配置类的class对象,例如:
1 ApplicationContext ac = 2 new AnnotationConfigApplicationContext(AppConfig.class, AppConfig1.class);