spring IOC 使用注解方式配置
spring·基于注解的方式IOC操作bean管理
1 配置maven依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.9.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
</dependency>
</dependencies>
2 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" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd"> <!--开启组件扫描> <context:annotation-config/> <!--要写的内容--> </beans>
3 在要创建类的上面添加注解@component
- @Component, @Service, @Controller, @Repository作用是一样的
-
注解里面的value属性值可以省略不写
-
默认值是类名称,首字母小写
如:UserService -- userService
-
在xml配置文件上配置bean文件
4 组件扫描的细节
-
在xml文件配置
-
use-default-filter="false",表示不使用默认的filter,自己设置扫描内容
<context:component-scan base-package="com.atguigu" use-defaultfilters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan>
意思是:在com.atguigu这个包中,默认不扫描,扫描类型是注解,注解是@Controller下的类
-
exclude-filter:设置那些内容不进行扫描
<context:component-scan base-package="com.atguigu"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/> </context:component-scan>
5 基于注解方式实现属性注入
- @Autowired
- @Qualifier
- @Resource
- Value
-
@Autowired:根据属性类型进行自动装配
操作步骤:1 用注解的方式创建对象
2 在要实现属性注入的对象上面添加@Autowire注解
-
@Qualifier:根据名称进行注入
@Qualifier(value = "属性名称")
-
@Resource:可以根据类型注入,可以根据名称注入
6 完全注解开发
1 创建一个配置类
2 在类上面写注解
@Configuration //作为配置类,替代 xml 配置文件
@ComponentScan(basePackages = {"com.atguigu"})
public class SpringConfig {
}
3 创建测试类
将ClassPathXMLConfigApplication改写程AnnotationConfigApplication
@Test
public void testService2() {
//加载配置类
ApplicationContext context
= new AnnotationConfigApplicationContext(SpringConfig.class);
}