注解开发
- 介绍:注解开发是spring的强项,实际开发过程中更多使用的是注解注入而非bean标签注入
- xml和注解开发的对比:
- xml可以适用任何场景 ,结构清晰,维护方便
- 注解不是自己提供的类使用不了,开发简单方便
- 建议使用xml和注解整合开发
- xml管理Bean
- 注解完成属性注入
- 使用过程中, 可以不用扫描,扫描是为了类上的注解
原始注解
注解 | 说明 |
---|---|
@Component | 使用在类上用于实例化Bean |
@Controller | 使用在web控制层类上用于实例化Bean |
@Service | 使用在service层类上用于实例化Bean |
@Repository | 使用在dao层类上用于实例化Bean |
@Autowired | 使用在字段上用于根据类型依赖注入 |
@Qualifier | 结合@Autowired一起使用用于根据名称进行依赖注入 |
@Resource | 相当于@Autowired+@Qualifier,按照名称进行注入 |
@Value | 注入普通属性 |
@Scope | 标注Bean的作用范围,默认单例,注解加在类上 |
@PostConstruct | 使用在方法上标注该方法是Bean的初始化方法 |
@PreDestroy | 使用在方法上标注该方法是Bean的销毁方法 |
@Component - 定义Bean
-
设置扫描路径
-
在配置文件中启用context命名空间(前文有)
-
使用
context:component-scan
标签<context:component-scan base-package="路径"/>
- 路径:用注解设置bean的类的范围
-
-
定义Bean
-
在类前面使用
@Component()
注解,代替配置文件中的bean标签 -
括号内填入bean的id
-
@Scope - 定义生命周期
- 在类前面使用
@Scope("prototype")
启用生命周期注解@Scope("singleton")
取消使用生命周期注解
- 在方法上标注
@PostConstruct
表示 init 函数 - 在方式上标注
@PreDestroy
表示 destroy 函数
依赖注入
注解 | 说明 |
---|---|
@Autowired | 使用在字段上用于根据类型依赖注入 |
@Qualifier | 结合@Autowired一起使用用于根据名称进行依赖注入 |
@Resource | 相当于@Autowired+@Qualifier,按照名称进行注入 |
@Value | 注入普通属性 |
注入普通属性
@Value("root")
private String userName;
纯注解开发
- 从Spring3.0开始可以使用@Configuration定义配置类,可以替换xml配置文件
- 原理:配置类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进行扫描,并用于构建bean定义对象,初始化Spring容器
@Configuration - 配置
-
创建配置类,
-
配置类前使用
@Configuration
注解 -
使用
@ComponentScan()
注解,括号内填入扫描路径- 可以填入数组,例如
@ComponentScan({"com.ss","com.sss"})
- 可以填入数组,例如
-
如何加载配置类初始化容器
ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
@Bean - 第三方bean管理
- 标注在某个返回实例的方法上,用于注册bean对象
- 相当于配置文件中的bean标签
示例:获取DataSource
@Bean
public DataSource dataSource(){
DruidDataSource ds = new DruidDataSource();
//dataSource.setDriverClassName(driverClassName);//如果不配置druid会根据url自动识别dbType,然后选择相应的driverClassName
ds.setUrl("jdbc:mysql://localhost:3306/demo");
ds.setUsername("root");
ds.setPassword("root");
return ds;
}
当第三方bean需要依赖注入时,设置形参后,容器会根据类型自动装配对象
@Bean
public DataSource dataSource(DataSource dataSource){
return dataSource;
}
@PropertySource - 加载properties配置文件
-
相当于context:property-placeholder标签
@Configuration @PropertySource("classpath:jdbc.properties")
@Import - 导入副配置类
-
用于在主配置类中导入副配置类
@Import(SpringConfig.class)