您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 市场营销 > Spring入门教程
Spring春天来了一、理论知识1.依赖注入、控制反转依赖注入:在运行期,由外部容器动态地将依赖对象注入到组件中控制反转:应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部窗口负责得。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓的反转。2.spring的主要特性。(1)降低组件之间的耦合度,实现软件各层之间的解耦。(2)可以使用容器提供的众多服务,如:事务管理服务、消息服务、JMS服务、持久化服务等等。(3)容器提供单例模式支持,开发人员不再需要自己编写实现代码。(4)容器提供了AOP技术,利用它很容易实现如权限拦截,运行期监控等功能。(5)容器提供的众多辅作类,使用这些类能够加快应用的开发,如:JdbcTemplate、HibernateTemplate.(6)对主流的应用框架提供了集成支持。3.常用技术控制反转/依赖注入---面向切入编程---与主流框架的整合、管理---二、基本实例1.准备搭建环境dist\spring.jarlib\jakata-commons\commons-loggin.jar如果使用了切面编程,还需下列jar文件:lib\aspectj\aspectjweaver.jar和aspectjrt.jarlib\cglib\cglib-nodep-2.1.3.jar如果使用了jsr-250中的注解,还需要下列jar文件:lib\j2ee\common-annotations.jar2.搭建并测试环境建立名为spring_01_base项目,根据需求导入jar包。建立一个Junit测试单元SpringEnvTest,测试代码如下:@TestpublicvoidtestEnv(){ApplicationContextctx=newClassPathXmlApplicationContext(beans.xml);}beans.xml配置文件在此省略(见下)。运行此测试如无错,则说明环境搭建成功。说明:beans.xml可以在类路径下进行配置,也可以在具体的目录下配置。可以是一个配置文件,也可以是多个配置文件组成String数组传入。3.实例作如下准备工作:(1)建立UseDao接口,代码如下:packagecom.asm.dao;publicinterfaceUserDao{voidsave();}(2)建立UserDao接口的实现类,UserDaoImplpackagecom.asm.dao.impl;importcom.asm.dao.UserDao;publicclassUserDaoImplimplementsUserDao{publicvoidsave(){System.out.println(执行save方法...);}}(3)在src目录下配置此beans.xml,它的配置如下:?xmlversion=1.0encoding=UTF-8?beansxmlns=:xsi=:schemaLocation=://=userDaoImplclass=com.asm.dao.impl.UserDaoImpl//beans说明:bean代表一个实质的java类,通过它的id可以获取一个此类的一个对象。补充:让xml配置文件在编译时提示[windows][preferences][myeclipse][filesandeditors][xml][xmlcatalog]点add,在出现窗口的location中选“filesystem”,然后在spring解压目录的dist/resources目录中选择“spring-beans-2.5.xsd”,并将keyType值改为“SchemaLocation”,key值为:(4)Junit测试单元SpringEnvTest中增加如下代码测试:@Testpublicvoidbase(){ApplicationContextctx=newClassPathXmlApplicationContext(beans.xml);UserDaouserDao=(UserDao)ctx.getBean(userDaoImpl);userDao.save();}以上的代码就是通过配置文件beans.xml获取所需要的实例对象。4.三种bean的生成方式除了上面使用的类直接生成方式,还有bean静态工厂及bean实例工厂。bean静态工厂的配置如下:beanid=userDaoImpl2class=com.asm.dao.impl.UserDaoImplFactoryfactory-method=getUserDaoImpl/相应的工厂类代码如下:packagecom.asm.dao.impl;publicclassUserDaoImplFactory{publicstaticUserDaoImplgetUserDaoImpl(){returnnewUserDaoImpl();}}bean实例工厂的配置如下:beanid=factoryclass=com.asm.dao.impl.UserDaoImplFactory2/beanid=userDaoImpl3factory-bean=factoryfactory-method=getUserDaoImpl/相应的工厂类的代码如下:packagecom.asm.dao.impl;publicclassUserDaoImplFactory2{publicUserDaoImplgetUserDaoImpl(){returnnewUserDaoImpl();}}5.bean的作用域singleton:返回bean的同一个实例,也是默认的作用域(无状态bean使用此作用域)prototype:每次请求都会创建一个实例(有状态bean使用此作用域)request、session、globalsession这三个作用域主要用在web应用中6.bean的生命周期(1)什么时候初始化bean实例当scope=singleton,即默认情况,会在装载配置文件时实例化。如果希望在调用getBean时才初始化,可以使用lazy-init=true补充:如果希望希望该配置文件中的所有bean都延迟初始化,则应在beans根结点中使用lazy-init=true。当scope=prototype时,在调用getBean()方法时才会初始化。(2)生命周期:构造器、init方法、获取bean后的操作、destroy方法(ctx.close、注意如果bean的scope设为prototype时,当ctx.close时,destroy方法不会被调用)7.属性注入Setter方式(1)简单属性(如String):beanid=userServiceBeanclass=com.asm.service.UserServiceBeanpropertyname=idvalue=10/propertypropertyname=usernamevalue=张某某/property/bean(2)对象属性-外部bean注入:在上面的bean中增加如下配置:propertyname=userDaoref=userDaoImpl/对象属性-内部bean注入:在上面的bean中增加如下配置:propertyname=userDaobeanid=tempclass=com.asm.dao.impl.UserDaoImpl//property(3)集合属性注入:propertyname=listlistvalueList值一/valuevalueList值二/valuevalueList值三/value/list/propertypropertyname=setsetvalueSet值二/valuevalueSet值一/valuevalueSet值三/value/set/propertypropertyname=mapmapentrykey=onevalue=一/entrykey=twovalue=二/entrykey=threevalue=三//map/propertypropertyname=propropspropkey=p1first/proppropkey=p2second/proppropkey=p3third/prop/props/property注意:在相应的字段上一定要有setter方法,才能注入。补充:使用继承。在beans.xml中的配置如下:beanabstract=trueid=parentpropertyname=usernamevalue=张某某/property/beanbeanid=XXXclass=com.asm.vo.Userparent=parentpropertyname=passwordvalue=123456/property/bean相当于在XXXbean实例中也有username属性设置。8.属性注入构造器方式beanid=userServiceBean2class=com.asm.service.UserServiceBeanconstructor-argindex=0value=李某某/constructor-argindex=1ref=userDaoImpl/constructor-argindex=2listvalueList值一/valuevalueList值二/valuevalueList值三/value/list/constructor-arg/beanUserServiceBean对应的构造方法代码如下:publicUserServiceBean(Stringusername,UserDaouserDao,SetStringset){this.username=username;this.userDao=userDao;this.set=set;}注意:此方法会覆盖掉默认的构造方法,导致要依赖默认构造方法的配置不可用,因此我们还应为此类提供一个默认的构造器。三、使用注解方式注入1.准备注解方式的注入主要针对对象属性的注入。使用注解功能要引用注解包,另beans.xml的配置模板如下:?xmlversion=1.0encoding=UTF-8?beansxmlns=:xsi=:context=:schemaLocation=://://
本文标题:Spring入门教程
链接地址:https://www.777doc.com/doc-2850080 .html