Spring的控制反转
1.spring的介绍
spring是一款很受欢迎的java开源框架,核心全程围绕着BeanFactory展开,构成如下图。
2.IOC控制反转
2.1定义:把对象创建交给spring管理,不用new的方法,也不用工厂模式
2.2原理:1.xml配置文件,2.dom4j解析xml,3.工厂设计模式,4.反射
2.3使用:1.配置文件方式,2.注解方式
3.IOC注入bean管理
3.1.1 xml配置方式
1.就是xml配置文件中的spring创建对象的方式,也就是bean标签的配置
2.实例化方式:
2.1:使用类无参构造器(最常用)
2.2:使用静态工厂
2.3:使用实例工厂
3.1.2 常见属性
1.id:起名字根据id属性值得到配置对象,可以起任意命名,但不能包含特殊符号
2.class:创建对象所在类的全路径
3.scope:1.bean的作用范围
2.scope取值:singleton 单例,是默认值
prototype多例
request 将对象存到request域中
session 将对象存到Session域中
globalSession 将对象存到globalSession域
3.1.3属性注入
1.创建对象时,设置属性值
2.方式:1.使用有参构造器 在bean标签中使用constructor-arg子标签
2.使用set方式(最为常用) 在bean标签中使用property子标签
3.使用接口(基本不用,spring不支持这种方式)
3.注入复杂类型属性:Array 使用bean的子标签property的list子标签
List 使用bean的子标签property 的List 子标签
Map 使用 bean 的子标签 property 的map 子标签
Property 使用bean的子标签property的props子标签
4.举例
<!--1. set类型注入--> <bean id="per" class="com.per"> <property name = "id" value="95001"/> <property name = "num1" value="003"/> <property name = "name" value="张小三"/> </bean> <bean id="userInfo" class="com.userInfo"> <property name = "username" value="张三"/> <property name = "number" value="1001"/> <property name = "p" ref="per"/> </bean>
<!--2.含有list或者map注入方式--> <bean id="userInfo" class="com.userInfo"> <property name="username" value="张三"/> <property name="number" value="1001"/> <property name="per"> <list> <value>张三</value> <value>李四</value> <value>王五</value> <value>hello</value> </list> </property> </bean>
3.2.1 通过注解的方式对bean注入
1.写法:@注解名称(属性名称=属性值),可以在类,方法,属性上使用注解。
注解可以替代配置文件,但不可能完全不配置,只是减少配置罢了
2.开启注解扫描:在xml中配置<context:compoment-scan base-package=“”></con
Text:compoment-scan>base-package指定包名spring会扫描
3.创建对象注解:@Component(@Controller:web层,@Service:业务层
@Repository:持久层这三个注解是component注解的衍生注解,为了是让标注类本身的用途清晰,目前这四个注解功能是一致的,spring后续版本会对其增强)
Bean中的scope属性对应的注解为@Scope,在四个注解下面使用即可
4.注入属性的注解:@Autowired根据类名自动找到对应的对象实例
@Resource(name=”要引入的对象在类注解中value中指定的对象名”)可以指定对象
5.注入属性的注解例子
5.1 @component,@Controller ,@Service, @Repository注入方式
首先xml文件(定义扫描器)
<!-- 扫描器 -->
<context:component-scan base-package="/com"/>
描述,装配时使用的是@value(用来装配对象属性)@Autowired(装配对象域属性,属于byType注入)@Resource(“值”)(对象域属性,属于byName注入) @Resource(不带参数就是byType注入)(注意:@Qualifier(“”)也是byName注入,但是前面必须要有@Autowired)
5.2 bean的生命始末
@PostConstruct(初始),@preDestroy(销毁)(了解内容)
5.3 使用javaconfig来配置(了解内容)
5.4 使用junit4测试(了解内容)
5.5 xml文件配置的优先级比注解的要高
3.2.2 xml配置文件与注解混合使用
创建对象使用xml配置文件
注入属性使用注解