spring通俗易懂1使用反转控制注入值_第1页
spring通俗易懂1使用反转控制注入值_第2页
spring通俗易懂1使用反转控制注入值_第3页
spring通俗易懂1使用反转控制注入值_第4页
spring通俗易懂1使用反转控制注入值_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SpringSpring快速ApplicationContextapplicationnewClassPathXmlApplicationContext("beans.xml");oServiceo=(oService)application.getBean("oSpring");System.out.println(o);Property里面name属性就是javabean里面需要注入属性值的属性oBeaninfoApplicationContextapplicationnewClassPathXmlApplicationContext("beans.xml");Bean1bean1=(Bean1)application.getBean("bean1");运行结果 Bean.②.ApplicationContextapplicationnewClassPathXmlApplicationContext("beans.xml");Bean2bean2=(Bean2)③.Spring①.BeanidnameidIocname属性在Iocid属性即可。name属性。namename②.SingletonBean。destroy方法。LifeCycle销毁。。。。。populate(移植properties(属性BeanBeanNameAware如果Bean实现BeanFactoryAwareApplicationContextAwaresetBeanFactory如果存在类实现 BeanPostProcessor(后处理Bean),执行用来动态扩展修改Bean。(程序自动调用后处理Bean)packageimport importorg.springframework.beans.factory.config.BeanPostProcessor;publicclassMyBeanPostProcessorimplementsBeanPostProcessor{ StringbeanName)throws ceptionreturnbean;//返回bean,表示没有修改,如果使用动态,返回代}publicObjectpostProcessBeforeInitialization(Objectbean,StringbeanName)throws ception}}BeanInitializingBean调用<beaninit-method="init">如果存在类实 BeanPostProcessor(处理 ,执BeanDisposableBean调用 destroy-method="customerDestroy">指定销毁方packageimportorg.springframework.beans.factory.BeanNameAware;importorg.springframework.beans.factory.DisposableBean;importorg.springframework.beans.factory.InitializingBean;importorg.springframework.context.ApplicationContext;importorg.springframework.context.ApplicationContextAware;publicclassLifeCycleBean1implementsprivateStringpublic{}publicStringgetInfo()return}publicvoidsetInfo(Stringinfo){=info;}publicvoidsetBeanName(StringbeanId)//TODOAuto-generatedmethodSystemou.printn("第三步:实现BeanNamAware接口,会注入Beanid:"+beaId);//实现BeanNaeAare接口,通过setBeanName注入eans.xl文件中的id属性,配置文件在下面:参考输出lifeCyclBen1,即输出配置文件中的id属性。}publicvoidsetApplicationContext(ApplicationContextthrows ception//TODOAuto-generatedmethod}publicvoidafterPropertiesSet()throwsException//TODOAuto-generatedmethodstub}publicvoid{method='myinit'");}publicStringtoString(){return"LifeCycleBean1[info="+info+}publicvoiddestroy()throwsException}publicvoid{}}57c2bd:startupdate[FriNov1513:40:32CST2013];rootofcontext[BeanBeanbean进行(前面已经配置了其他的几个Bean,每个Bean都执行2次→前处理Bean后处理bean)。Spring,那么销毁方法就会执行。Springclose方法。使用<property>引入其他BeanBean,配置父子bean关系java类之间没有任何关系,这不是类的继承。ContextLoaderAPIContextLoaderContextLoaderListenerContextLoaderServletHttpServlet。这个接口 数配置信息,默认的路径是"/WEB-INF/applicationContext.xmlWEB-INF下创建的contextConfigLocationcontextviewincopyto<context-在一起并一“,”applicationContext-*.xml有applicationContext-ibatis-base.xml,applicationContext-action.xml,applicationContext-ibatis-dao.xmlapplicationContext.xml第一种:直接将之放到/WEB-INF下,之在web.xml中一个listener、的给出的,写成:viewincopyto<!--ContextConfigurationlocationsforSpringXMLfiles--perties存放class文件对应的是项目开发时的src classpathclasspath*注意:Component(“o”)相当于<beanid=”o”class=””>的id。Spring提供AnnotationConfigApplicationContextregister<beansxmlns=" 要手动配置Bean,然后使用Autowired进行自动寻找类型匹配进行注入。<beanid="productService"<beanid="productDao"class="cn.publicclassProductServiceprivateProductDaopublicvoid{}}publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ApplicationContextapp=newUserServiceuser=(UserService)app.getBean("user");user.regist();}*.web.xml中配置<listener><listener-WebApplicationContextapplicationContext=另式WebApplicationContextapplicationContext=(WebApplicationContext)publicvoidpublicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{WebApplicationContextweb=//ApplicationContextapp=newUserServiceuser=(UserService)web.getBean("user");}<beanid="user"class="cn.AOPAspectOrientedPrograming AspectJ是一个基于Java语言的AOP框架,Spring2.0开始,SpringAOP引入对Joinpoint(连接点):所谓连接点是指那些被到的点。在spring中,这些点指的是Advice(通知/增强):所谓通知是指到Joinpoint之后所要做的事情就是通知.通Introduction(引介):引介是一种特殊在不修改类代码的前提下,Target(目标对象):的目标对Weaving(织入):是指把增强(advice)应用到目标对象(Target)来创建新的对象()的过程.把advice放入Target创建的过程叫做织入。spring采用动态():一个类被AOP织入增强后,就产生一个结果Aspect(切面是切入点和通知(引介)★.AOP模客户不想或者不能够直接一个对象,而对象可以在客户端和目标对象之间起到()角色:角色内部含有对真实的,从而可以在任何在任何时候都可以替代真实控制对真实的,负责在需要的时候创建真实主或之后,都要执行某个操作,而不是单纯地将调用传递给真实对象。**@author**@authorpublicinterfaceSubjectpublicvoid}★.①.publicclasspublicclassRealSubjectimplementsSubjectpublicvoidregist(){System.out.println("作。。。。。。publicpublicTestpublicstaticvoidmain(String[]args)SubjectrealSubject=new//创 对 Subject= Subject.regist();}}测试类JDK1.3public SubjectimplementsprivateSubjectpublicvoidsetRealSubject(Subjectsubject)this.subject=}publicvoidregist()longstartSystem.currentTimeMillis();longend=System.currentTimeMillis();}}编写动态程//publicinterfaceFly//publicinterfaceFlypublicvoid}publicclassBirdimplementsFlypublicvoidgoFly(){publicpublicTestpublicvoid{finalFlyfly=new fly.getClass().getInterfaces(),newInvocationHandler(){publicObjectinvoke(Object ,Methodmethod,Object[]throwsThrowable{System.out.println("鸟飞不走了! 了return}returnmethod.invoke(fly,}//调 对象的业务方法}}}★.CGLIBJDKCGlib采用非常底层字节码技术,可以为一个类创建子类,解决无接口问publicpublicclassCatpublicvoidrun(){System.out.println("猫捉老 }}publicvoidpublicvoid{.finalCatcat=new。Enhancerenhancer=newenhancer.setCallback(newMethodInterceptor()//相比invocationhandler,多了一个 方 象publicObjectintercept(Object ,Methodmetod,Object[]args,)throwsThrowable②.cglib{ Objectresult=metod.invoke(cat,args); return}returnmetod.invoke(cat,}//生 对 =(Cat).run();Spring★.SpringAOPAOP为通知Advice定义了SpringAdvice5前置通知后置通知环绕通知异常抛出通知SpringAOP切面类型:*PointcutAdvisor:代表具有切点的切面,可以指定目标类哪些方*IntroductionAdvisor:代表引介切面,针对引介通知而使用切面(不要求掌握案例一:配置MethodBeforeAdvice:对目标类的所有方法进行①.jarAOP2个.aopalliance-1.0.0.jar(来自AOP)publicinterfaceIMethodBeforeAdvicepublicinterfaceIMethodBeforeAdvicepublicvoidsay publicvoidsearch();publicvoidfind();publicvoidsave();}publicpublicoServiceimplementsIMethodBeforeAdvicepublicvoid System.out.println("执行 o方 }publicvoidSystem.out.println("执行search方 }publicvoidSystem.out.println("执行find方 }publicvoidSystem.out.println("执行save方 publicclassoBeforeAdvicepublicvoidbefore(Methodmethod,Object[]args,throwsThrowable类配置真实业务bean配置真实业务bean<bean 配置通知,增强代码逻辑<bean <!--<bean " <property <propertyname="target" <propertyname="interceptorNames"ApplicationContextapp=ApplicationContextapp= o=(IMethodBeforeAdvice)o FactoryBeantarget:的目标对Interfaces:要实现的接TargetClass:是否对类而不是接口设置为true时使用CGLib代interceptorNames:singleton:返回是否为单实例,默认为单optimize:truepublicclassOrderServicepublicvoidexportOrder(){publicclassOrderServicepublicvoidexportOrder(){}publicvoiddeleteAllOrders(){}}publicinterfaceTimeMonitorablepublicvoidsetMonitorActive(boolean}②publicinterfaceTimeMonitorablepublicvoidsetMonitorActive(boolean}③.publicclasspublicclassMyIntroductionInterceptorDelegatingIntroductionInterceptorimplementsTimeMonitorableprivatebooleanisActive;publicObjectinvoke(MethodInvocationmi)throws{longbegin=0;longend=0;System.out.println("开 begin=}Objectresultsuper.invoke(mi);end=System.currentTimeMillis(); ,运行时间:"+(end-begin)}returnresult}publicvoidsetMonitorActive(booleanisActive)this.isActive=<bean <bean 织入<bean <property <propertyname="target"<propertyname="interceptorNames"<!—trueCGLib<property TargetClass"ApplicationContextapplicationContext=ApplicationContextapplicationContext=OrderServiceorderService=(OrderService)applicationContext.getBean("orderServiceTimeMonitorablemonitorable=(TimeMonitorable)orderService.exportOrder();orderService.deleteAllOrders();⑥.性能,运行时间:1396322008225开始....性能,运行时间:16开始....2ok,然后使用注解@transactionalok<bean<propertyname="sessionFactory"Struts2+Spring+Hibernate<!--<constantname="struts.devMode"value="true"<package<!--<constantname="struts.devMode"value="true"<packagename="basic"extends="struts-default"<actionname="addProduct" .web.action.ProductAction"①.jarapps\struts2-blank.warstruts2jarstruts2-json-plugin-2.3.7.jarstruts2Ajax(这个很少使用struts2-spring-plugin-2.3.7.jarstruts2Spring(这个比较常用,但是我们现②.web.xml Spring3.2jar AOPweb应用中使用spring: springjunit整合:spring-test.jarJdbcTemte:spring-jdbc.jarspring-tx.jarspring整合其他ORM框架:spring- (用于整合Hibernate配置perties、web.xml配置器、src或WEB-INF下创applicationContext.xmlSpringJdbcSpringORMSpringwebSpringJunitHibernate:jar文件分析:解压 解压 解压 解压 log4j:slf4j-log4j12-1.7.2.jar、log4j-使用二级缓存mysql-connector-java-5.0.8-<beanid="productDAO" <!--<beanid="productDAO" <!--ServiceDAO<beanid="productService" <propertyname="productDAO"<context-<context-Servlet/FilterSpring ④.srcjdbc<property<property<property<property<!--<property<!--c3p0<!--SQL<property<property<!--Session<property<!--hbm ⑤.publicclasspublicclassProductActionextendsActionSupport{publicStringadd(){Productproduct=newProduct();//Spring ==returnSUCCESS;}}publicclasspublicclassProductServiceprivateProductDAOproductDAO;//dao属性在xmlpublicvoidsetProductDAO(ProductDAOproductDAO){ductDAO=productDAO;}//publicvoidaddProduct(Productproduct){}}Sessionpublicvoidsave(Productproduct)Sessionsession=HibernateUtils.getCurrentSession();Transactiontransaction=session.beginTransaction();mit();//}publicclassHibernateUtilsprivatestaticConfigurationconfiguration;privatepublicclassHibernateUtilsprivatestaticConfigurationconfiguration;privatestaticSessionFactorysessionFactory;//configuration=new//sessionFactory=}//SessionpublicstaticSessionreturn}//SessionpublicstaticSessiongetCurrentSession(){publicstaticSessiongetCurrentSession(){}}JavaBeanpublicclassProduct{privateIntegerid;privateStringname;privateDoubleprice;publicpublicclassProduct{privateIntegerid;privateStringname;privateDoubleprice;publicIntegergetId(){return}publicvoidsetId(Integerid){this.id=id;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){=name;}publicDoublegetPrice(){returnprice;}publicvoidsetPrice(Doubleprice){this.price=price;}} <class <class <id.Product"table="products"<generator<property<property XmlActionSpring①.jarjarjar包即可。strutsspringactionspring管理:②.ActionpublicclasspublicclassProductActionextendsprivateProductServicepublicvoidsetProductService(ProductServiceproductService){ductService=}publicString{ProductproductnewProduct(); returnreturn}publicclassprivateProductDaopublicvoidpublicclassprivateProductDaopublicvoidsetProductDao(ProductDaoproductDao)ductDao=}publicvoidsave(Productproduct)//TODOAuto-generatedmethodstub}//}④.struts.xml<!--<!--在st

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论