【Spring5】第三篇:IOC之Annotation方式
一、什么是注解
- 注解是代码特殊标记,格式:@注解名称(属性名称=属性值, 属性名称=属性值…)
- 使用注解,注解作用在类上面,方法上面,属性上面
- 使用注解目的:简化 xml 配置
二、Spring 注解创建对象
- @Component
- @Service
- @Controller
- @Repository
上面四个注解功能是一样的,都可以用来创建 bean 实例,名称不一样是为了按照约定的习惯规范代码;主要针对自己写的类;
@Bean:针对外部引入的jar(用在创建方法返回对象上)
- @Lazy:是否为懒加载
- @Scope:指定单实例还是多实例
@Import:作用在类,可以直接引入类名创建对象实例
- @ImportSelector:可以通过包全类名创建对象实例
- @ImportBeanDefinitionRegistrar:通过在重写方法中手动创建Bean
- @Conditional:根据条件创建对象,条件类需要实现 Condition 接口;可以作用在方法或者类上
- FactoryBean:创建对象实例,定义 bean 类型可以和返回类型不一样;
2.1、注解创建对象
默认的实例名为: 类名首字母小写;也可以自己指定 @Service(value=””)
pom.xml
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.2.7.RELEASE</version>
</dependency>
package com.wells.demo.ioc.annotation;
import org.springframework.stereotype.Service;
/** * Description 通过四种注解方式创建对象实例: @Component、@Service、@Controller、@Respository * Created by wells on 2020-07-19 20:44:31 */
@Service
public class UserService {
public void delUser() {
System.out.println("del user");
}
}
配置spring-bean.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:component-scan base-package="com.wells.demo.ioc.annotation"/>
</beans>
2.2、开启组件扫描细节配置
2.2.1、include-filter
use-default-filters=“false” 表示现在不使用默认 filter,自己配置 filter:【context:include-filter ,设置扫描哪些内容】
<context:component-scan base-package="com.wells.demo" use-default- filters="false">
<context:include-filter type="annotation" expression="org.wells.demo.ioc.annotation.service"/>
</context:component-scan>
2.2.2、exclude-filter
下面配置扫描包所有内容 context 设置哪些内容不进行扫描
<context:component-scan base-package="com.wells.demo">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
三、Spring 注解注入属性
注入自定义类型属性:
- @Autowired:根据属性类型进行注入引用类型
- @Qualifier:根据名称进行注入引用类型,需要与 @Autowired 一起使用
- @Resource:可以根据类型注入引用类型,可以根据名称注入引用类型
注入基本类型属性:
- @Value:注入普通类型类型属性
package com.wells.demo.ioc.annotation;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Service;import javax.annotation.Resource;
/* Description 通过四种注解方式创建对象实例: @Component、@Service、@Controller、@Respository 默认的实例名为: 类名首字母小写;也可以自己指定,例如:@Service(value=””) Created by wells on 2020-07-19 20:44:31 */
@Service
public class UserService {
// @Autowired // 根据类型进行注入引用类型
// private UserDao userDao;// @Autowired
// @Qualifier(value = “userDao”) // 根据名称进行注入引用类型,但是必须和Autowired一起使用
// private UserDao userDao;// @Resource // 根据类型注入引用类型
@Resource(name = "userDao") // 根据名称进行注入引用类型
private UserDao userDao;
@Value(value = "wells") // 注入基础类型
private String name;
public void delUser() {
System.out.println("del user in service");
userDao.delUser();
}
@Test
public void testAnnotation() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("component-scan.xml");
UserService userService = applicationContext.getBean("userService", UserService.class);
userService.delUser();
System.out.println(userService.name);
}
}
四、spring配置文件注解
@Configuration // 作为配置类,替代xml配置文件
配置文件替代类,通过 @Configuration 注解代替xml配置文件
package com.wells.demo.ioc.annotation;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
/** * Description * Created by wells on 2020-07-19 22:40:51 */
@Configuration
@ComponentScan(basePackages = "com.wells.demo.ioc.annotation")
public class SpringConfig {
}
测试类
@Test
public void testAnnotationByConfiguration(){
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringConfig.class);
UserService userService = applicationContext.getBean("userService", UserService.class);
userService.delUser();
System.out.println(userService.name);
}
完整代码
Spring Annotation
还没有评论,来说两句吧...