Spring基于注解驱动开发
基于xml的开发模式是需要使用spring-config.xml文件进行扫描配置,将一些Bean注入到spring容器中,
基于注解驱动开发是将想要注入的多个Bean在一个类中进行注入
1.依赖导入
<!--设置Spring依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
2.类开发
/**
* 普通java类
*/
public class ApplicationConfig {
//在类上加@Bean注解可以实现将想要注册的Bean放在Spring容器中
//@Bean对应xml配置文件中的Bean标签
@Bean
public String m1(){
return "m1";
}
}
通常在类的上面也会使用@Configuration注解,此注解的作用:
- 明确表示该类是配置类
- 使用此注解后spring容器会自动生成该类的代理对象(基于CGLib实现),并会扩展一些功能
3.Bean使用
因为使用的是注解形式,所以需要使用是实现了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);
}
}
4.给Bean起特定的名称
在@Bean注解中使用name或者value属性
当仅设置名称时可以省略value
@Configuration
public class ApplicationConfig {
//在类上加@Bean注解可以实现将想要注册的Bean放在Spring容器中
//@Bean对应xml配置文件中的Bean标签
@Bean("abc")
public String m1(){
return "m1";
}
}
5.设置单例和每实例
使用@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;
}
}
显示结果: