Spring4的IOC的注解开发
1.1.1Spring的IOC的注解开发的入门
1.1.2创建一个web工程
1.1.3引入jar包
Spring3.X 版本:
4个core+ 2个日志记录jar包: 注解的内容直接在核心包当中:
Spring4.X版本: 除了核心包, 还需要引入aop的包:
4个core + 2个日志记录jar包: + Aop的jar包:
1.1.4引入spring的配置文件
在src下创建一个applicationContext.xml
引入约束:使用注解开发, 需要引入一个context约束。
约束:
\spring-framework-4.2.4.RELEASE\docs\spring-framework-reference\html\
<?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"> <!-- bean definitions here -->
</beans>
1.1.5创建一个接口和实现类:
Public class Userdao
{
Public void save();
}
Public class UserDaoImpl implements UserDao{
//实现save方法:
}
//测试类:
方式一: 可以使用传统的方式, 直接new UserDaoImpl
方式二: 在xml当中进行配置,交给spring管理:
方式三: 使用注解的形式开发:
方式三的开发步骤:
A:配置组件扫描:
B: 在类上添加注解:
@Component(value="") 万能的注解
@Repository(value="") 应用在dao层:
@Service(value="") 应用在业务层:
@Controller(value="") 应用在web层:
C:编写测试类:
1.1.6注解方式设置属性的值
传统方式: 提供属性, 提供set方法:
注解方式: 使用注解方式, 可以没有set方法。
属性如果有set方法, 需要将属性注入的注解添加在set方法上。
属性没有set方法, 需要将属性注入的注解添加在属性上。
1.2Spring的IOC的注解的详解
1.2.1@Component 组件
能够修饰一个类, 该类交给spring管理。 前提是配置好包扫描。
类上的注解:
@Component(value=“userServiceImpl”) 应用在任何层的任何类上: :
这个注解有三个衍生注解。(功能类似)修饰类。
@Controller :web层的类
@Service :service层的类
@Repository :dao层的类:
1.2.2属性注入的注解
普通的属性:
@ Value :设置普通属性的值:
对象类型属性:
@Autoware :设置对象类型的属性的值, 是按照对象的类型进行注入。 和名称没有关系。
我们习惯是按照名称, 进行注入: 必须让 @Qualifier 一起使用, 完成按照名称属性注入:
@Resource :完成对象类型的属性的注入, 按照名称完成属性注入: spring提供的一套规范实现的。
Bean 的其他注解(了解)
@PostConstruct 相当于之前bean标签当中: init-method: 在构造器执行后, 执行。
@PreDestroy 相当于之前bean标签当中: destroy-method: 在工厂销毁之前之前。 对象交给了spring管理。 工厂自动关闭。 (只适应于单例模式)
@Scope(value="prototype") 配置为多例 : (重点掌握)
默认情况: 工厂读取配置文件, 将bean对象根据单例模式创建。 并且,创建创建完成后, 工厂关闭。
多例的特点: 每创建一次, init方法执行一次。 destroy方式, 失效。 工厂不关闭。
@PostConstruct 相当于init-method
@destroy-method 相当于 destroy-method
Bean作用范围的注解:
@Scope :作用的范围:
Singleton :默认单利:
Prototype :多例
Request
Session
Globalsession
1.3IOC的XML和注解开发比较
1.3.1XML和注解的比较
适应场景:
XML: 可以适应于任何场景。
注解: 有些地方是用不了的, 这个类不是自己提供的。 不能修改人家的源代码。
XML优点:
结构清晰, 维护方便。
注解: 开发方便
1.3.2XML和注解整合开发
XML 管理bean,注解完成属性注入。(没有set都可以)各需索长。
案例: xml管理bean , 注解完成属性的注入;
方式一:纯xml的方式: service层,依赖ProductDao 和 OrderDao
方式二:使用xml和注解方式共同开发: xml管理bean. 属性注入交给注解:
注意: 不需要扫描: 扫描类上的注解: compenent-scan
需要开启一个新得东西:
context:annotation-config/ 在没有类扫描的情况下, 使用属性注入的注解: 能够扫描属性注解
关于这个配置在博客搜了一下,两个配置比起来的话 其实context:component-scan
范围更全一些
https://blog.csdn.net/fox_bert/article/details/80793030
一般来说,像@ Resource 、@
PostConstruct、@Antowired这些注解在自动注入还是比较常用,所以如果总是需要按照传统的方式一条一条配置显得有些繁琐和没有必要,于是spring给我们提供<
context:annotation-config/>的简化配置方式,自动帮你完成声明。思考1:假如我们要使用如@Component、@Controller、@Service等这些注解,使用能否激活这些注解呢?
答案:单纯使用< context:annotation-config/>对上面这些注解无效,不能激活!