Spring框架是一个融合剂,可以将Struts2框架和Hibernate框架整合在一起使用可以成为SSH;
Spring框架中的核心分为两个概念 IOC(控制反转) 和AOP(面向切面编程)
IOC(控制反转)
控制反转就是,原来是程序员自己来new创建对象,现在是Spring框架来给创建对象
也可以叫做di (依赖注入)
相当于Player 里面有一个 Team对象然后Spring 框架在创建player对象是首先创建一个Team对象在给Player对象注入;
对象容器有三种创建实例对象方法
导入jar包
1.可以根据构造方法来创建实例对象
-
有参构造
在Spring.xml xml文档中创建一个实例对象
例如
通过bean标签里面的constructor_arg标签里面的index 是参数的索引位置从0开始,value是给值 -
无参构造
这个创建出来的是一个没有值的对象
2.通过factory静态工厂来创建对象
创建一个phone实体类
在创建一个factory工厂
传参数然后在Spring.xml里面配置bean标签
测试:
3.通过调用factory 工厂里面的方法来创建
创建一个工厂对象
在Spring.xml里面配置
配置完成测试:
完成三个创建方式
di(依赖注入)
1————构造方法赋值
通过bean标签里面的constructor_arg标签里面的index 是参数的索引位置从0开始,value是给值
2————set赋值(里面可以方set集合,数组,map<k,v>集合,其他对象,Properties(它是hashtable的子类也是k,v结构的),list)
//set的赋值
<property name="该类中对应的set方法后面的名字()">
<set>
<value>值</value>
<value>值</value>
<value>值</value>
</set>
</property>
//数组的赋值
<property name="该类中对应的set方法后面的名字()">
<array>
<ref bean="其他的唯一标识查找对象"/>
<ref bean="其他的唯一标识查找对象"/>
</array>
</property>
//map集合
property name="该类中对应的set方法后面的名字()">
<map>
<entry key="key(键)" value="value(value值)"/>
<entry key="key(键)" value="value(value值)"/>
</map>
</property>
//引用其他对象
<property name="该类中对应的set方法后面的名字()" ref="其他的唯一标识"/>
//property
<property name="该类中对应的set方法后面的名字()">
<props>
<prop key="key(键)">value(value值)</prop>
<prop key="key(键)">value(value值)</prop>
<prop key="key(键)">value(value值)</prop>
</props>
</property>
//list集合
<property name="该类中对应的set方法后面的名字()">
<list>
<value>值</value>
<value>值</value>
<value>值</value>
</list>
</property>
3.注解注入
注解注入有两种
@Autowired 自动绑定
@Resource 资源
使用注解注入的时候线打开注解开关
context:annotation-config/
两个注解的区别是
@Autowired 根据类型匹配 它是Spring框架提供的
@Resource 先是genuine名字匹配再是根据类型抓取,他是jdk提供提供
核心容器的其他功能
bean的作用域分为两个
一个为单例(singleton)只能创建一个对象 ,一个为多例(prototype)会创建多个对象
1、单例bean的配置:
bean id=“shanzhu” class=“com.youzhong.entity.ShanZhu” 默认单例
2、多例的bean配置:
bean id=“shanzhu” class=“com.youzhong.entity.ShanZhu” scope=“prototype”
有四个注解
@Controller , @Service , @Repository , @Component
控制器 服务,业务 仓库,存储 组件
@Controller,@Service,@Repository,@Component
四个注解的功能完全相同。它们的区别是语义不同。
@Controller 是控制的意思,应该添加在控制层的类上,如struts2的Action。
@Service 是服务业务的意思,应该添加在业务层的类上,如ssh的Service。
@Repository 是仓库的意思,应该添加在dao层的类上,如UserDao。
@Component 是组件的意思,应该添加在除了上面三层的其他层次;
bean的生命周期
在创建他的时候会先执行init()方法然后再调用init-method方法
创建完了执行,执行完了不会立即调用distory方法,当容器销毁的时候才会调用销毁方法.
懒加载
lazy_init="true"是启动懒加载 只对bean单例进行设置,要是对多例进行的话就会更懒;
比较复杂的bean,需要懒加载不让他在类加载的时候创建
依赖
depends_on 依赖
假如有两个dean标签的话
有一个标签里面有 depebds_on属性的时候会先创建另一个对象在创建该对象
autowire 自动绑定
需要在Spring.xml中的bean标签中配置
autowire="";有三个参数是default ,byName,byType;第一个是根据默认实在上面的beans标签中配置的,第二个是根据名字查找,第三个是根据类型匹配
引入其他xml的时候
在xml里面配置
在取数据的时候ApplicationContext ac = new ClassPathXmlApplicationContext(“spring.xml”,“spring2.xml”);
常用的接口有两个:BeanFactory , ApplicationContext
BeanFactory是spring框架内部使用的,只提供了管理bean的功能。
ApplicationContext 是框架外部使用的,它是BeanFactory的孙子接口,扩展了BeanFactory的功能,增加了一些企业级的应用。