已阅读5页,还剩13页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录1、Spring是什么?12、为什么使用Spring23、实例化Spring容器24、编写Spring配置文件时,不能出现帮助信息。25、三种实例化bean的方式。26、bean的作用域。37、注入依赖对象38、集合类型的装配39 依赖注入410 通过在classpath自动扫描方式把组件纳入spring容器中管理511 AOP代理对象612 AOP中的概念613 使用spring进行面向切面(AOP)的编程614 Spring+JDBC组合开发715 Spring2.5+Hibernate3.3+Struts1.3开发101、 Spring是什么?Spring一个开源的控制反转(Inversion of Control,IoC)和面向切面(AOP)的容器框架。1.1、控制反转Public class PersonServiceBeanPrivate PersonDao persnDao=new PersonDaoBean();Public void save(Person person)personDa.save(person);personDaoBean是在应用内部创建和维护的。所谓控制反转就是应用本身不负责依赖对象的创建和维护,依赖对象的创建和维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是控制反转。1.2、依赖注入(Deperndency Injection)当我们把依赖对象交给外部容器负责创建,那么PersonDaoBean类可以改成如下;Public class PersonServiceBeanPrivate PersonDao personDao;/通过构造器参数,让容器把创建好的以来对象注入进PersonServiceBean,当然也可以使用setter方法进行注入。Public PersonServiceBean(PersonDao personDao)This.personDao=personDao;Public void save(Person person)personDao.save(person);所谓依赖注入就是指,在运行期,有外部容器动态地将依赖对象注入到组件中。2、 为什么使用SpringSpring可以带来:1.降低组件之间的耦合度,实现软件各层之间的解耦。2.可以使用容器提供的众多服务:事务管理服务,消息服务等。3.容器提供单例模式支持,开发人员不需要自己编写实现代码。4.容器提供AOP技术,容易实现权限拦截、运行期监控等。5.容器提供一些辅助类,如:JDBC template、Hibernate template6.可以集成主流框架:Hibernate、JPA、Struts等3、实例化Spring容器方法一:在类路径下寻找配置文件来实例化容器(推荐)ApplicationContext ctx=new ClassPathXmlApplicationContext(new String“beans.xml”);方法二:在文件系统路径下寻找配置文件来实例化ApplicationContet ctx=new FileSystemXmlApplicationContext(new String“d:beans.xml”)Spring的配置文件可以指定多个,可以通过String数组传入。4、编写Spring配置文件时,不能出现帮助信息。由于Spring的Schema文件位于网络上,如果机器不能连接到网络,那么在编写配置文件的时候就无法出现提示信息,解决方法:1 让机器上网,Eclipse会自动从网上下载schema文件并缓存到硬盘上。2 手动添加schema文件:Windows-preferences-myeclipses-files and editors-xml-xmlcatalog点“add”,在出现的窗口中的key type中选择url,在location中选择“file system”,然后在Spring解压目录的dist/resources目录中选择spring-beans-2.5,返回窗口把窗口中的key type改为schema location,key改为/schema/beans/ spring-beans-2.5.xsd5、三种实例化bean的方式。1 使用类构造器实例化2 使用静态工厂方法实例化Pubic class OrderFatoryPublic static OrderServiceBean reatOrder()Return new OrderServiceBean();3 使用实例化工厂方法实例化Public class OrderFactoryPublic OrderFactoryReturn new OderServiceBean();6、bean的作用域。1 singleton,默认作用域每个bean定义只有一个对象实例,默认情况下会在容器启动时初始化bean,但我们可以指定bean节点的lazy-init=”true”来延迟初始化bean,这是只有第一次获取bean时才会初始化bean。如果对所有的bean都应用延迟初始化,可以在根节点beans设置Default-lazy-init=”true”,如2 prototype每次从容其获取bean都是新对象3 request/session/global session7、注入依赖对象1 基本类型对象注入:/构造器注入/属性setter方法注入2 注入其他bean方式一方式二-使用内部bean,但该bean不能被其他bean使用8、集合类型的装配Public class PersonServiceBean()Private Set sets=new HashSet();Private List lists=new ArrayLit();Private Properties properties=new Properties();Private Mapmaps=new HashMap();/这里省略setter,getter方法1 set的注入123为了通过接口访问集合,把getter方法放入接口中,用for(String value:personService.getSets()打印。2 list的注入123用for(String value: personService.getLists()打印。3 properties的注入123用for(Object key: personService.getProperties ().keySet()打印:personSrvice.getProperties().getProperty(String)key);4 maps的注入用for(String key: personService.getMaps().keySet()打印:personSrvice. getMaps ().get (key);9 依赖注入使用构造器注入PersonServiceBean.javaPrivate PersonDao peronDao;Private String name;Public PersonServiceBean(PersonDao peronDao, String name)Ths.personDao=person;T=name;xx.Xml使用属性setter方法注入使用Field注入(用于注解方式)注入依赖对象可以采用手工配置或自动配置,在实际应用中建议采用手工配置。1 手工配置依赖对象 1 在bean节点下配置 2 在java代码中使用Autowired或Resource注解方式进行装配,但需要在xml文件中配置一下信息。这个配置隐式注册了多个对注解进行解析处理的处理器:AutowiredAnnotationBeanPostProcessor/CommonAnnotationBeanPostProcessorPersistenceAnnotationBeanPostProcessor/RequiredAnnotationBeanPostProcessor注:Resource注解在spring安装目录的libj2eecommon-annotations.jar3 在java代码中使用AutoWired或Resource注解方式装配,区别是:AutoWired默认按类型装配,Resource默认按名称装配,当找不到匹配的bean时才会按类型装配。AutoWiredPrivate PersonDao personDao;/用于字段上。ResourcePublic void setXXX(XXX xx)/用于属性的setter方法上。AutoWired注解是按类型装配依赖对象,默认情况下要求依赖对象必须存在,如果允许控制可以设置required属性为false,如果想使用按名装配可以结合Qualifier注解一起使用AutoWired Qualifier(“PersonDaoBean”)Privste PersonDao personDao;Resource注解和AutoWired一样,可以标注在字段或setter方法上,但它默认按名装配,名称可以通过Resource的name属性指定,如果没有name属性,当注解标注在字段上,即默认取字段的名称寻找依赖对象,当注解标注在setter方法上,即默认去属性名寻找依赖对象。Resource(name=”personDaoBean”)Private PersonDao personDao;/用于字段上注:如果没有指定name属性,并且按照默认的名称仍然找不到依赖对象,Resource注解会回退到按类型装配,但一旦指定了name属性就只能按名称装配。2 自动配置依赖对象10 通过在classpath自动扫描方式把组件纳入spring容器中管理之前是通过bean节点来配置的,在大项目中会有上百组件,若采用bean定义,会增加配置文件的体积,查找与维护也不方便,自动扫描机制,在类路径下寻找标注了Component、Service、Controller、Repository注解的类,并把这些类纳入spring容器,作用和bean标签一样,需要在xml文件中添加:Xmlns:context=”/schema/context”/schema/contexthtttp://schema/context/spring-contet.2.5xsd其中base-packag为需要扫描的包Service用于标注业务层组件,Controller用于标注控制层组件(如struts中的antion),Repository用于标注数据访问组件,DAO组件,Component泛指组件,当组件不归类的时候,可以使用这个注解。11 AOP代理对象1 对哪些方法进行拦截,拦截之后做哪些动作横切线关注点2 目标对象必须实现接口才能使用代理类3 客户端调用代理对象的方法时,代理对象会调用invoke方法,在这个方法中如果要访问目标对象,把这个方法的调用再委派给目标对象,使用method.invoke(keyvalue);4 代理对象应采用接口来引用。5 使用cglib.jar文件,目标对象可以无需实现接口,使用Enhancer enhancer=new Enhancer();enhancer.setSuperclass(this.targetObject.getClass();/代理技术产生目标类的子类,覆盖所有非final修饰符的方法enhancer.setCallback(this);/回调方法当代理对象里面的业务方法被调用时执行return enhancer.create();代理对象实现MethodInterceptor,并重写intercept(Object proxy,Method method,Object args,MethodProxy methodPoxy)12 AOP中的概念Aspect(切面):横切线关注点的抽象即为切面,它与类相似,只是两者的关注点不一样,类是对物体特征的抽象,而切面是横切线关注点的抽象。Joinpoint(连接点):所谓链接点是指那些被拦截到的点,在spring中,这些点指的是方法,因为spring只支持方法类型的连接点,实际上它还可以是field或类构造器Pointcut(切入点):所谓切入点是指我们要对那些joinpoint进行拦截的定义Advice(通知):所谓通知是指拦截到joinpoint之后所要做的事情就是通知,通知分为前置通知,后置通知,异常通知,最终通知,环绕通知Target(目标对象):代理的目标对象。Weave(织入):指将aspects应用到target对象并导致proxy对象创建的过程就是织入。Introduction(引入):在不修改类代码的前提下,Introduction可以在类运行期动态添加一些方法或field。13 使用spring进行面向切面(AOP)的编程要进行AOP编程首先我们要在spring配置文件引入aop命名空间。Spring提供了两种切面使用方式:基于xml配置方式进行aop开发/用作切面的普通类交给spring管理/通过元素进行配置基于注解方式进行aop开发首先启动对AspectJ注解的支持编写自定义切面1 Aspect注解2 Pointcut(“execution(* com.su.service.*.*(.)”)/声明切入点3 定义一个切入点名称。4 Before(“anyMethod()&args(userName)”)/定义前置通知Public void doAccessCheck(String userName)5 AfterReturning(pointcut=”anyMethod()”,returning=”revalue”)/后置通知Public void doReturnCheck(String revalue)6 AfterThrowing(pointcut=”anyMethod()”, throwing=”ex”)/例外通知Public void doExceptionAction(Exception ex)7 After(“anyMethod()”)/定义最终通知Public void doReleaseAction()8 Around(“anyMethod()”)/定义环绕通知Public Object doBasicProfiling(ProceedingJoinPoint pjp)throws ThrowableReturn ceed();使用环绕通知,必须在内部执行ceed()方法,若不执行,业务bean中被拦截的方法就不会执行。在执行这个方法时如果后面还有切面的话,它的执行顺序应该是先执行后面的切面,如果后面没有切面了,在执行目标对象的业务方法。如果不调用,后面的切面和业务方法都不会被执行。可用作判断用户权限。14 Spring+JDBC组合开发使用Spring+JDBC集成步骤如下:1 配置数据源可以使用资源文件,将其配置,然后通过引用2 配置事务。配置事务时,需要在xml配置文件中引入用于声明事务的tx命名空间事务的配置方式有两种:注解方式ServiceTransactionalPublic class PersonServiceBean implements PersonService如果抛出运行期例外(unchecked),事物会回滚,若是checked例外,事物不会回滚。可以通过Transactional注解修改,是否回滚。事物的传播属性:Transactional(propagation=Propagaton.xxx)Required(默认):业务方法需要在一个事务中运行,如果方法运行时,已经处在一个事务中,那么加入到该事物,否则为自己创建一个新的事务。Not-supported:声明方法不需要事务,如果方法没有关联到一个事务,容器不会为它开启事务。如果方法在一个事务中被调用,该事务会被挂起,在方法调用结束后,原先的事务便会恢复执行。Requiresnew:属性表明不管是否存在事务,业务方法总会为自己发起一个新的事务,如果方法已经运行在一个事务中,则原有事务会被挂起,新的事务会被创建,直到方法执行结束,新的事务才算结束,原先的事务才恢复执行。Mandatory:该属性指定业务方法只能在一个已经存在的事务中执行,业务方法不能自己发起事务,如果业务方法在没有事务的环境中调用,容器会抛出异常。Supports:这一事物属性表明,如果业务方法在某个范围内被调用,则方法成为该事物的一部分,如果业务方法在事务范围外被调用,则方法在没有事务的环境下执行。Never:指定业务绝对不能在事务环境中执行。如果业务方法在某事务中执行,容器会抛出例外,只有业务方法没有关联到任何事务才能正常执行。Nested:如果一个活动的事务存在,则运行在一个嵌套的事务中,如果没有活动事务,则按required属性执行,它使用了一个单独的事务,这个事务拥有多个可以回滚的保存点,内部事务的回滚不会对外部事务造成影响,它只对DataSourceTransactionManager事务管理器起效。其他:readOnly:只读事务,不能进行更新操作。Timeout:超时时间30s。Isolation:数据库的隔离级别。由低到高依次为:Read Uncommited:读未提交数据(会出现脏读,不可重复读,幻读)。Read Commited:读已提交数据(不可重复读,幻读)。Repeatable Read:可重复读(幻读)。Serializable:串行化脏读:一个事务读取到另一个事务未提交的更新数据。不可重复读:在同一事务中,多次读取同一数据返回的结果不同,后续读取可以读到另一事务已提交的更新数据。相反,可重复读,在同一事务中多次读取数据时,能保证所读数据一样。幻读:一个事务读取到另一事务已提交的insert数据。3 创建一个service类,通过实现接口的方式。创建一个bean类,属性,getter、setter4 在配置文件中使用:自动装配或手动装配完成数据源注入。在service类中为JdbcTemplate注入数据源,通过setter方法,public void setDataSource(DataSource dataSource) this.jdbcTemplate = new JdbcTemplate(dataSource);使用JdbcTemplate对对象进行数据操作jdbcTemplate.update(sql, args, argTypes)jdbcTemplate.queryForObject(sql, args, argTypes, requiredType)jdbcTemplate.query(select * from person, new PersonRowMapper()5 定义一个类实现RowMapper接口,Person person=new Person(rs.getString(name);person.setId(rs.getInt(id);return person;基于xml配置方式开发团队建议注解方式。15 Spring2.5+Hibernate3.3+Struts1.3开发Hibernate核心安装包下的Hibernate3.jar,lib/required/*.jar,lib/optional/ehcache-1.2.3.jarHibernate注解安装包下的lib/test/slf4j-log4j12.jarSpring安装包下的dist/spring.jar,dist/modules/spring-webmvc-struts.jarlib/Jakarta-commons/commons-logging.jar,commons-dbcp.jar,commons-poool.jarlib/aspect/aspectjweaver.jar,aspectjrt.jarlib/cglib/cglib-nodep-2.1_3.jar,lib/j2ee/common-anotations.jar,lib/log4j/log4j-1.2.15.jarStruts下载struts-1.3.8-lib.zip,需要使用到解压目录下的所有jar,建议把jstl-1.0.2.jar和standard-1.0.2.jar更换为1.1版本,Spring中已经存在一个antlr-2.7.6.jar,所以把antlr-2.7.2.jar删除,避免jar冲突。数据驱动jar修改Spring配置文件com/su/bean/Person.hbm.xmlhibernate.dialect=org.hibernate.dialect. MySQL5Dialecthibernate.hbm2ddl.auto=creathibernate.show_sql=falsehibernate.fomat_sql=false新建实体Beanpublic class Person private Integer id;private String name;public Integer getId() return id;public void setId(Integer id) this.id = id;public String getName() return name;public void setName(String name
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届国家管网集团高校毕业生招聘考试备考试题(浓缩500题)及答案详解(考点梳理)
- 2026秋季国家管网集团福建公司高校毕业生招聘考试备考试题(浓缩500题)及完整答案详解
- 2026国家管网集团校园招聘(河北招17人)考试参考试题(浓缩500题)带答案详解(轻巧夺冠)
- 2025国网天津市电力校园招聘(提前批)笔试模拟试题浓缩500题附答案详解(培优)
- 2026国网山西电力公司高校毕业生提前批招聘(约450人)笔试备考题库浓缩500题有完整答案详解
- 2026国家管网集团高校毕业生招聘考试参考题库(浓缩500题)及参考答案详解(研优卷)
- 2026国网云南省电力公司高校毕业生提前批招聘(约450人)笔试备考题库浓缩500题及一套完整答案详解
- 2026国网宁夏电力公司高校毕业生提前批招聘(约450人)笔试备考题库浓缩500题及答案详解(基础+提升)
- 国家管网集团高校毕业生招聘考试题库(浓缩500题)及答案详解(易错题)
- 2026秋季国家管网集团东部原油储运公司高校毕业生招聘笔试参考题库(浓缩500题)及参考答案详解(突破训练)
- 电网规划培训课件
- 医疗机构医疗质量安全专项整治行动方案2025
- 中国唐代音乐课件
- 点、直线和平面的投影
- 2025年云南省中考语文试卷真题(含答案解析)
- 交通卡口监控系统维护方案
- 2025年人教版小学一年级下学期奥林匹克数学竞赛试题(附答案解析)
- 《与鲁迅先生对话》课件
- TSG D2002-2006燃气用聚乙烯管道焊接技术规则
- NB/T 11525-2024气动、电动调度单轨吊车技术条件
- DB34T 4829-2024公路工程泡沫轻质土设计与施工技术规程
评论
0/150
提交评论