基于xml的开发模式是需要使用spring-config.xml文件进行扫描配置,将一些Bean注入到spring容器中, 基于注解驱动开发是将想要注入的多个Bean在一个类中进行注入
通常在类的上面也会使用@Configuration注解,此注解的作用:
明确表示该类是配置类使用此注解后spring容器会自动生成该类的代理对象(基于CGLib实现),并会扩展一些功能因为使用的是注解形式,所以需要使用是实现了ApplicationContext接口的类 AnnotationConfigApplicationContext
public class Demo1 { public static void main(String[] args) { //构造方法传入配置类 ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class); //Bean的名称默认是方法名 String m1 = context.getBean("m1", String.class); System.out.println(m1); } }在@Bean注解中使用name或者value属性 当仅设置名称时可以省略value
@Configuration public class ApplicationConfig { //在类上加@Bean注解可以实现将想要注册的Bean放在Spring容器中 //@Bean对应xml配置文件中的Bean标签 @Bean("abc") public String m1(){ return "m1"; } }使用@Scope注解的,默认sington
@Configuration public class ApplicationConfig { //默认是使用单实例,可以不加@Scope注解 @Scope() @Bean public Object obj(){ Object object = new Object(); return object; } } public class Demo1 { public static void main(String[] args) { ApplicationContext context = new AnnotationConfigApplicationContext(ApplicationConfig.class); Object obj = context.getBean("obj"); Object obj1 = context.getBean("obj"); System.out.println(obj==obj1); } }显示结果: 设置每实例prototype
@Configuration public class ApplicationConfig { //默认是使用单实例 @Scope("prototype") @Bean public Object obj(){ Object object = new Object(); return object; } }显示结果:
注册到Spring容器中的Bean的生命周期方法