Spring 基于注解控制反转(IOC)
一、创建实体类
@Component("iocBean")
public class IOCBean {
...
}
二、创建 Spring 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<!-- 告知 spring 创建容器时要扫描的包 -->
<context:component-scan base-package="chu.yi.bo"/>
</beans>
三、IOC 相关注解
@Component 注解表示将类实例的创建、销毁交由 Spring 管理。该注解的 value 属性用于指定类实例的唯一 id。@Controller、@Service、@Repository 三个注解与 @Component 功能完全一样,只是根据语义的不同 @Controller 用于表现层,@Service 用于业务层,@Repository 用于持久层。
Spring 基于注解依赖注入(DI)
一、创建实体类
@Component("diBean")
public class DIBean {
...
}
@Component("iocBean")
public class IOCBean {
@Autowired
DIBean diBean;
}
二、创建 Spring 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<!-- 告知 spring 创建容器时要扫描的包 -->
<context:component-scan base-package="chu.yi.bo"/>
</beans>
三、@Autowired 注解
@Autowired 注解用于属性注入,该注解会根据属性类型自动注入。当有多个类型匹配时,将属性名作为 id 在 Spring 容器中查找,如果找不到会报错。当使用注解进行依赖注入并且注解作用于属性上时,属性的 Set 方法可以省略(如上)。注解也可以作用于属性的 Set 方法上,如下:
@Component("iocBean")
public class IOCBean {
DIBean diBean;
@Autowired
public void setDiBean(DIBean diBean) {
this.diBean = diBean;
}
}
四、@Qualifier 注解
@Qualifie 注解使属性注入在根据类型的基础上再按照 Bean 的 id 进行注入,该注解用于属性注入时不能单独使用,需要和 @Autowire 注解一起使用。该注解用于方法参数注入时可以单独使用。该注解的 value 属性用于指定 Bean 的 id(value = “diBean” 可以简写为 “diBean”)。
@Component("iocBean")
public class IOCBean {
@Autowired
@Qualifier("diBean")
DIBean diBean;
}
五、@Resource 注解
@Resource 注解使属性注入按照 Bean 的 id 进行属性注入。该注解的 name 属性用于指定 Bean 的 id。
@Component("iocBean")
public class IOCBean {
@Resource(name = "diBean")
DIBean diBean;
}
六、@Value 注解
@Value 注解用于注入基本数据类型和 String 类型的属性。该注解的 value 属性用于指定属性值。
@Component("iocBean")
public class IOCBean {
@Value("Hello")
String str;
@Value("123")
Integer num;
}
作用域注解和周期方法注解
注解 | 说明 |
---|---|
@Scope | 用于指定 Bean 的作用范围,value 属性的属性值决定具体的作用范围。取值:singleton、prototype、request、session、globalsession |
@PostConstruct | 用于指定初始化方法 |
@PreDestroy | 用于指定销毁方法 |