文章目录
1. Spring IoC — 基于注解
SpringIoc的使用,需要我们通过XML将类声明给Spring容器进行管理,从而通过Spring工厂完成
对象的创建及属性值的注入;
Spring除了提供基于XML的配置方式,同时提供了基于注解的配置:直接在实体类中添加注解声明
给Spring容器管理,以简化开发步骤。
1.1 Spring框架部署
1.1.1 创建Maven项目
略
1.2.2 添加SpringIoC依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.16.RELEASE</version>
</dependency>
1.2.3 创建Spring配置文件
因为Spring容器初始化时,只会加载applicationContext.xml文件,那么我们在实体类中添加的注
解就不会被Spring扫描,所以我们需要 在applicationContext.xml声明Spring的扫描范围 ,以达
到Spring初始化时扫描带有注解的实体类并完成初始化工作
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 声明使用注解配置 -->
<context:annotation-config/>
<!-- 声明Spring工厂注解的扫描范围 -->
<context:component-scan base-package="com.cg.beans"/>
</beans>
1.2 IoC常用注解
1.2.1 @Component
- 类注解,声明此类被Spring容器进行管理,相当于bean标签的作用
- @Component(value=“stu”) value属性用于指定当前bean的id,相当于bean标签的id属性;
value属性也可以省略,如果省略当前类的id默认为类名首字母改小写 - 除了@Component之外 @Service、@Controller、@Repository这三个注解也可以将类声明给
Spring管理,他们功能相同,主要是语义上的区别- @Controller 注解主要声明将控制器类配置给Spring管理,例如Servlet
- @Service 注解主要声明业务处理类配置Spring管理,Service接口的实现类
- @Repository 直接主要声明持久化类配置给Spring管理,DAO接口
- @Component 除了控制器、servcie和DAO之外的类一律使用此注解声明
1.2.2 @Scope
- 类注解,用于声明当前类单例模式还是 非单例模式,相当于bean标签的scope属性
- @Scope(“prototype”) 表示声明当前类为非单例模式(默认单例模式)
1.2.3 @Lazy
- 类注解,用于声明一个单例模式的Bean是否为懒汉模式
- @Lazy(true) 表示声明为懒汉模式,默认为饿汉模式(Spring容器初始化阶段就会
完成此对象的创建)
1.2.4 @PostConstruct
- 方法注解,声明一个方法为当前类的初始化方法(在构造器之后执行),相当于bean标签的initmethod属性
1.2.5 @PreDestroy
- 方法注解,声明一个方法为当前类的销毁方法(在对象从容器中释放之前执行),相当于bean标
签的destory-method属性
1.2.6 @Autowired
- 属性注解、方法注解(set方法),声明当前属性、方法自动装配,默认byType
- @Autowired(required = false) 通过requried属性设置当前自动装配是否为必须(默认必须——如
果没有找到类型与属性类型匹配的bean则抛出异常)- byType
- ref引用
@Autowired
//@Qualifier("c2")当前类型有多个相同时,通过id c2 去自动装配(bean的id)
public void setClazz(@Qualifier("c2") Clazz clazz) {
this.clazz = clazz;
}
1.2.7 @Resource
- 属性注解,也用于声明属性自动装配
- 默认装配方式为byName,如果根据byName没有找到对应的bean,则继续根据byType寻找对应
的bean,根据byType如果依然没有找到Bean或者找到不止一个类型匹配的bean,则抛出异常。