文章目录
在学习注解模式前,建议先阅读我的前一篇XML模式下的Spring博文,注解模式相较于XML模式来说,更加的简单、简洁。
1. 框架部署
1.1 添加依赖
添加 Spring 的依赖以及 lombok 的依赖。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.13.RELEASE</version>
</dependency>
1.2 自定义模板
自定义模板文件,文件名为 spring-ioc-annotation ,后缀为 xml ,内容如下:
<?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.mr.beans"/>
</beans>
1.3 创建Spring配置文件
因为 Spring 容器初始化时,只会加载 applicationContext.xml 文件,那么我们在实体类中添加的注解就不会被 Spring 扫描,所以我们需要在 applicationContext.xml 声明Spring的扫描范围,以达到 Spring 初始化时扫描带有注解的实体类并完成初始化工作。
使用 spring-ioc-annotation 模板来创建 applicationContext.xml 文件。
2. 常用注解
2.1 @Component
- 类注解,声明此类被Spring容器进行管理,相当于
bean标签的作用 - 也可以使用
value属性用于指定当前bean的id ,@Component(value="stu"),相当于bean标签的id属性;value属性也可以省略,如果省略当前类的id默认为类名首字母改小写 - 除了
@Component之外@Service、@Controller、@Repository这三个注解也可以将类声明给Spring管理,他们主要是语义上的区别@Controller注解主要声明将控制器类配置给Spring管理,例如Servlet@Service注解主要声明业务处理类配置Spring管理,Service接口的实现类@Repository直接主要声明持久化类配置给Spring管理,DAO接口@Component除了控制器、servcie和DAO之外的类一律使用此注解声明
- Bean类
@Component(value = "stu")
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Student {
private String stuNum;
private String stuName;
private String stuGender;
private int stuAge;
private Date enterenceTime; //入学日期
}
- 测试类
public class Test1 {
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Student student1 = (Student) context.getBean("stu");
System.out.println(student1);
}
}
运行后的输出如下:

可以发现,注释比一般形式更加方便。
2.2 @Scope
- 类注解,用于声明当前类单例模式还是 非单例模式,相当于bean标签的scope属性;
@Scope("prototype")表示声明当前类为非单例模式(默认单例模式)。
2.3 @Lazy
- 类注解,用于声明一个单例模式的Bean是否为懒加载;
@Lazy(true)表示声明为懒汉模式,默认为false。
2.4 @PostConstruct
方法注解,声明一个方法为当前类的初始化方法(在构造器之后执行),相当于bean标签的 init-method 属性。
2.5 @PreDestroy
方法注解,声明一个方法为当前类的销毁方法(在对象从容器中释放之前执行),相当于bean标签的 destory-method 属性。
2.6 @Autowired
- 属性注解、方法注解(set方法),声明当前属性自动装配,默认
byType @Autowired(required = false)通过requried属性设置当前自动装配是否为必须(默认必须——如果没有找到类型与属性类型匹配的bean则抛出异常)@Autowired默认使用byType来装配属性,如果匹配到类型的多个实例,再通过byName来确定Bean。
2.7 @Qualifier
@Qualifier 限定哪个bean应该被自动注入。当Spring无法判断出哪个bean应该被注入时,@Qualifier 注解有助于消除歧义bean的自动注入。示例如下:
若定义了两个 bean 标签的实例,如下,
<bean id="stu1" class="com.mr.bean.Student"></bean>
<bean id="stu2" class="com.mr.bean.Student"></bean>
引用实例时
public class clazz
{
@Autowired
private Student stu;
}
如果按照上面的程序运行的话,Spring会不知道注入那个实例,该程序会进行报错,而按照下面进行 @Qualifier 注解的话就不会进行报错。
public class clazz
{
@Autowired
@Qualifier("stu1")
private Student stu;
}
2.8 @Resource
- 属性注解,也用于声明属性自动装配
- 默认装配方式为
byName,如果根据byName没有找到对应的bean,则继续根据byType寻找对应的bean,根据byType如果依然没有找到Bean或者找到不止一个类型匹配的bean,则抛出异常。
本文介绍了如何使用注解模式配置Spring框架,包括添加依赖、自定义模板和创建配置文件。接着详细讲解了常用的注解如@Component、@Scope、@Lazy等,并通过示例展示了它们在Bean管理、初始化和销毁过程中的应用。此外,还阐述了@Autowired和@Resource注解在自动装配中的作用,以及如何解决多Bean注入时的歧义问题。
1391

被折叠的 条评论
为什么被折叠?



