1.Spring是一个轻量级开源框架.
b.AOP编程的支持-面向切面编程
c.声明事务的支持
d.整合各种框架
e.方便程序的测试
1)导包4(核心)+1(依赖);
dist--libs--:beans、core、context、expression
dependenices(整合后的)--apache.commons--commons.logging--logging-1.1.1.jar
schema--头部
/*<bean>:狭义: 类中私有属性的set/get()
广义:就是一个实体类*/
2)src下创建配置文件applicationContext.xml .
//配置这里的每一个bean,Spring容器都会帮我们创建对象,并且给创建出来的对象取一个唯一的标识(id)-- 自己取,没要求(建议和属性名一致)
//class="全类名"
<bean id="userBizId" class="com.qf.biz.impl.UserBizImpl"></bean>
//取对象
ApplicationContext context=new ClassPathXmlApplicationContext("xml名称");
ApplicationContext--beanFactory
//id:userBizId:通过表示Id获取对象
注入:通过第三方来对另一个对象进行实例化
eg:BizImpl 类中有DaoImpl的对象作为属性.
1) UserBizImpl有另一个类对象名称-userDao
public class UserBizImpl implements IUserBiz {
private IUserDao userDao;
2)<bean id="userBizId" class="com.qf.biz.impl.UserBizImpl">
/*name="userDao": 对应类中需要注入实现的属性(另一个对象)名称
ref="userDaoId":对应引用创建出来的对象的标识id
*/
<property name="userDao" ref="userDaoId"></property>
</bean>
1.默认无参方法的构造---反射
2.静态工厂:所有方法都static-注入实现的对象需要set/get()
3.实例工厂: 注入实现的对象需要set/get()
//静态工厂
<!--静态工厂 -->
<bean id="userDaoId2" class="com.qf.factory.StaticFactory"factorymethod="createUserDao"></bean>
<!-- 实例工厂:先创建工厂实例,创建对象 -->
1)<!-- 工厂对象 -->
<bean id="userDaoFactory" class="com.qianfeng.factory.UserDaoFactory"></bean>
2)<bean id="userDao3" factory-bean="userDaoFactory" factory-method="createUserDaoImpl"></bean>
9.作用域:用于确定spring创建bean实例个数是否是同一个 <bean>标签属性 scope
scope="singleton":单例
scope="prototype":多列
默认是单列
10.属性的自动依赖注入-autowire
autowire:属性依赖自动注入
1)autowire="byName":通过名称来注入,通过类中需要注入实现的对象的名称与主配置文件中的bean 的id名称 进行匹配,匹配上就注入
//以userDao去匹配 id的值,匹配上则找到.
public class UserBizImpl implements IUserBiz {
private IUserDao userDao;
<bean id="userBizId" class="com.qf.biz.impl.UserBizImpl" autowire="byName">
<!-- <property name="userDao" ref="userDaoId3"></property> -->
</bean>
<bean id="userDao" class="com.qf.dao.impl.UserDaoImpl"></bean>
//通过类型类匹配,匹配出来的是多个类.
<bean autowire="byType">
11.基于注解方式实现bean
<!-- 扫描所有添加了注解的类 -->
<context:component-scan base-package="com.qf">
3)类中:
/*@Component(value="userBiz")*/ //也可以这样写组件的注解
@Service(value="userBiz") //分层的注解
@Scope(value="singleton")
public class UserBizImpl implements IUserBiz {
@Resource(name="userName") //这里的userName对应的是UserDaoImpl中对应的userName
private IUserDao userDao;
/*@Autowired --默认是以byType的方式属性自动注入
private IUserDao userDao1;*/
public class UserDaoImpl implements IUserDao{}
轻量级:与EJB对比,依赖资源少,销毁的资源少
2.Spring的核心是控制反转(IOC)和面向切面(AOP)
3.Spring的优点:
a.方便解耦:IOC容器,依赖注入方式不必实例化类.b.AOP编程的支持-面向切面编程
c.声明事务的支持
d.整合各种框架
e.方便程序的测试
f.降低Java EE API的使用难度
4.IOC:控制反转,将对象创建的权利转移到第三方的容器来管理.通过xml文件方式获取对象---体现出解耦
5.如何搭建IOC:1)导包4(核心)+1(依赖);
dist--libs--:beans、core、context、expression
dependenices(整合后的)--apache.commons--commons.logging--logging-1.1.1.jar
schema--头部
/*<bean>:狭义: 类中私有属性的set/get()
广义:就是一个实体类*/
2)src下创建配置文件applicationContext.xml .
3) 编写xml设置头部
6.获取对象//配置这里的每一个bean,Spring容器都会帮我们创建对象,并且给创建出来的对象取一个唯一的标识(id)-- 自己取,没要求(建议和属性名一致)
//class="全类名"
<bean id="userBizId" class="com.qf.biz.impl.UserBizImpl"></bean>
//取对象
ApplicationContext context=new ClassPathXmlApplicationContext("xml名称");
ApplicationContext--beanFactory
//id:userBizId:通过表示Id获取对象
IUserBiz userbiz=(IUserBiz)context.getbean("userBizId");
7.属性的依赖注入
依赖:一个对象需要使用另一个对象.注入:通过第三方来对另一个对象进行实例化
eg:BizImpl 类中有DaoImpl的对象作为属性.
1) UserBizImpl有另一个类对象名称-userDao
public class UserBizImpl implements IUserBiz {
private IUserDao userDao;
2)<bean id="userBizId" class="com.qf.biz.impl.UserBizImpl">
/*name="userDao": 对应类中需要注入实现的属性(另一个对象)名称
ref="userDaoId":对应引用创建出来的对象的标识id
*/
<property name="userDao" ref="userDaoId"></property>
</bean>
<bean id="userDaoId" class="com.qf.dao.impl.UserDaoImpl"></bean>
8.bean的创建:在主配置文件中去配置1.默认无参方法的构造---反射
2.静态工厂:所有方法都static-注入实现的对象需要set/get()
3.实例工厂: 注入实现的对象需要set/get()
//静态工厂
<!--静态工厂 -->
<bean id="userDaoId2" class="com.qf.factory.StaticFactory"factorymethod="createUserDao"></bean>
<!-- 实例工厂:先创建工厂实例,创建对象 -->
1)<!-- 工厂对象 -->
<bean id="userDaoFactory" class="com.qianfeng.factory.UserDaoFactory"></bean>
2)<bean id="userDao3" factory-bean="userDaoFactory" factory-method="createUserDaoImpl"></bean>
9.作用域:用于确定spring创建bean实例个数是否是同一个 <bean>标签属性 scope
scope="singleton":单例
scope="prototype":多列
默认是单列
10.属性的自动依赖注入-autowire
autowire:属性依赖自动注入
1)autowire="byName":通过名称来注入,通过类中需要注入实现的对象的名称与主配置文件中的bean 的id名称 进行匹配,匹配上就注入
//以userDao去匹配 id的值,匹配上则找到.
public class UserBizImpl implements IUserBiz {
private IUserDao userDao;
<bean id="userBizId" class="com.qf.biz.impl.UserBizImpl" autowire="byName">
<!-- <property name="userDao" ref="userDaoId3"></property> -->
</bean>
<bean id="userDao" class="com.qf.dao.impl.UserDaoImpl"></bean>
2)autowire="byType":通过类型来注入,注意点:类型必须唯一(不然报错,因此只写一种创建bean).
3)与class的映射文件有关:知道找的是哪一个类型。//通过类型类匹配,匹配出来的是多个类.
<bean autowire="byType">
11.基于注解方式实现bean
1)dist---xsd.config--申明配置--The context schema
2)xml文件中:只写这个配置.<!-- 扫描所有添加了注解的类 -->
<context:component-scan base-package="com.qf">
3)类中:
/*@Component(value="userBiz")*/ //也可以这样写组件的注解
@Service(value="userBiz") //分层的注解
@Scope(value="singleton")
public class UserBizImpl implements IUserBiz {
@Resource(name="userName") //这里的userName对应的是UserDaoImpl中对应的userName
private IUserDao userDao;
/*@Autowired --默认是以byType的方式属性自动注入
private IUserDao userDao1;*/
}
@Component(value="userName")public class UserDaoImpl implements IUserDao{}