基于注解管理Bean对象
1. 基本介绍
Spring通过注解实现自动装配的步骤如下:
- 引入依赖
- 开启组件扫描
- 使用注解定义Bean
- 依赖注入
Spring默认不使用注解配置bean,因此需要我们在Spring的配置文件中配置context:component-scan元素开启Spring Beans的自动扫描功能。开启此功能后,Spring会从指定的包(base-package属性设置)及子包下的所有类,如果类上使用了@Component注解,九江该类注册到容器中。
<?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:component-scan base-package="com.lily"> </context:component-scan> </beans>
编写实体类User.java
@Component(value = "user") //<bean id="User" class com.lily.bean.User> public class User { }
测试:
public class Main { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml"); User user = context.getBean("user", User.class); System.out.println(user); } }
2. 使用注解定义bean
Spring提供了以下多个注解,这些注解可以直接标记在Java类上,将它们定义成Spring Bean。
注释 | 说明 |
---|---|
@Component | 该注解用于描述Spring的Bean,它是一个泛化的概念,仅仅表示容器中的一个组件(Bean),并且可以作用在应用的任何层次,例如Service层的,Dao层等,使用时只需要将该注解标记在相应的类上即可。 |
@Repository | 该注解用于将数据访问层(Dao层)的类标识符为Spring中的Bean,其功能与@Component功能相同。 |
@Service | 该注解通常作用在业务层(Service层),用于将业务层的类标识为Spring的Bean,其功能与@Component功能相同。 |
@Controller | 该注解通常作用在控制层(Controller层),用于将控制层的类标识为Spring的Bean,其功能与@Component功能相同。 |
3. 使用Autowired进行注入
单独使用@Autowired注解注入,默认是根据类型装配的【ByType】
4 使用Autowired和Qualifier注解联合注入
如果@Autowired要根据名称注入的话,需要配合@Qualifier注解一起配合使用。
5. 使用Resource进行注入
@Resource注解也可以完成属性注入,它和@Autowired注解的区别如下:
- @Resource注解是JDK自带的,而@Autowired注解是Spring框架自己的。
- @Resource注解默认根据名称装配(ByName),未指定name时,使用属性名作为name。通过name找不到的话会自动启动类型ByType装配。
- @Autowired注解默认根据类型ByType装配,如果想要根据名字进行装配,则要配合@Qualifier一起使用。
- @Resource注解用在属性上、sette方法上。
- @Autowired注解用在属性上,setter方法上,构造方法上,构造方法参数上。
注意:如果JDK不是8版本需要引入如下依赖才能使用@Resource注解
<!-- https://mvnrepository.com/artifact/jakarta.annotation/jakarta.annotation-api --> <dependency> <groupId>jakarta.annotation</groupId> <artifactId>jakarta.annotation-api</artifactId> <version>2.1.1</version> </dependency>
6. Spring全注解开发
全注解开发就是不再使用spring的配置文件,只需要编写一个配置类来代替配置文件:
标签:基于,Autowired,Spring,public,Bean,注解,class From: https://www.cnblogs.com/lilyflower/p/18054672@Configuration //表明该类是配置类 @ComponentScan("com.lily") //开启组件扫描 public class SpringConfig { } @Component(value = "student") public class Student { } public class Main { public static void main(String[] args) { // 加载配置类 ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class); Student student = context.getBean("student",Student.class); System.out.println(student); } }