1、spring3学习笔记Spring学习笔记:1. 面向接口(抽象)编程的概念与好处2. IOC/DI的概念与好处a) inversion of controlb) dependency injection3. AOP的概念与好处4. Spring简介5. Spring应用IOC/DI(重要)a) xmlb) annotation6. Spring应用AOP(重要)a) xmlb) annotation7. Struts2.1.6 + Spring2.5.6 + Hibernate3.3.2整合(重要)a) opensessionInviewfilter(记住,解决什么问题,怎么解决)8. Sp
2、ring JDBC9. 面向接口(抽象)编程10. Model层或者entyty层11. 12. 更好的方法:UserService是一个接口13. 由dao屏蔽数据库的访问层。14. Dom4j要比jdom功能强大些。15. 配置文件初始化xml文件。Property就是set方法;name是userserivce有一个setUserDAO,要传这个bean(u)16. 注解开发效率比较高。17. Spring的xml根节点叫beans18. 我们要用的话,最好是装到容器里面,19. 接口只能调用属于自己的方法,在实现的类里面有方法但是在接口里没有的方法,接口是不能调用 的。什么是IOC(D
3、I),有什么好处dependency injection(依赖注入)ioc(控制反转)1. 把自己new的东西改为由容器提供a) 初始化具体值b) 装配2. 好处:灵活装配20. 在spring2.5导入spring.jar就导入了全部需要用的jar包,但是在之后,将spring.jar包分类,可以单独导入单个需要用到的包。21. 在配置spring的时候完全可以用多个配置文件。(多个人协作的时候很好用)22. Xml里面ref参考了哪一个bean23. beanFactory是一个很根的接口。继承它的另一个接口是Applicationtext。所以ApplicationContext fac
4、tory = new ClassPathXmlApplicationContext(beans.xml);和BeanFactory factory = new ClassPathXmlApplicationContext(beans.xml);都是可以的。建议使用ApplicationContext24. 当factory.getBeans(“name”)的时候,返回的是object类型,可以进行强制类型转换,也可以用factory.getBeans(“name”,UserDAO.class)来指定返回的类型,。25. 面向接口编程但实际上真正注入的是它的实现;在xml文件里面配置26. IO
5、C容器a) 实例化具体beanb) 动态装配27. AOP支持a) 安全检查b) 管理transaction28. 29. Spring ioc配置与应用30. FAQ不给提示:a) window preferences myeclipse xml xml catalogb) User Specified Entries addi. Location: D:share0900_Springsoftspring-framework-2.5.6distresourcesspring-beans-2.5.xsdii. URI: file:/D:/share/0900_Spring/soft/spri
6、ng-framework-2.5.6/dist/resources/spring-beans-2.5.xsdiii. Key Type: Schema Locationiv. Key: http:/www.springframework.org/schema/beans/spring-beans-3.0.xsd31. Xsd文件放在org.springframework.benas.factory.xml包下面32. 注入类型33. 三种注入方式 ,spring的IOC有三种注入方式 第一是根据属性注入 也叫set方法注入;第二种是根据构造方法进行注入;第三种是根据注解进行注入,这种方式我认为
7、比较好,方便,要是bean多的话,使用前两种方式会使得配置文件过于臃肿。a) b) Spring_0300_IOC_Injection_Typec) setter(重要)d) 构造方法(可以忘记)i. 参数的传递可以用index来设置索引:public UserService(UserDAO userDAO) super(); this.userDAO = userDAO; 在xml文件里面这样写 ; /把上面名字为u的对象注入进去. e) 接口注入(可以忘记)34. 写了bean标签相当于new了一个这个类,因为都会注入。35. 或者都可以,唯一区别就是name里面可以含有特殊字符。36.
8、id vs. namea) Spring_0400_IOC_Id_Nameb) name可以用特殊字符37. 可以把简单属性配在xml文件里面;简单属性的注入a) Spring_0500_IOC_SimplePropertyb) 38. Bean的生存范围:a) bean 中的scope属性b) singleton 单例(不论拿多少次都只拿到一个对象。这是默认的)c) proptotype 每次创建新的对象。39. 集合注入a) Spring_0700_IOC_Collectionsb) 很少用,不重要!参考程序40. 41. 42. administratorexample.org43. s
9、upportexample.org44. developmentexample.org45. 46. 将三个prop组装成为一个results in a setAdminEmails(java.util.Properties) call,做为一个参数传递进去。 just some string 将其组装成为一个set集合,传递;47. 自动装配(两种byName,byType)a) Spring_0800_IOC_AutoWireb) byName(按照名字自动匹配,默认先匹配它) /当属性名字与bean的name相等时候,就自动匹配;如果没有找到就会出错。 c) byType(按照类型自动匹
10、配) /它会按照类型来匹配,但是如果在找到了两个同样 的类型,那么就会出错。 d) 其余的很少用e) 如果所有的bean都用同一种,可以使用beans的属性:default-autowire48. 生命周期a) Spring_0900_IOC_Life_Cycleb) lazy-init (不重要)/当BeanFactory factory = new ClassPathXmlApplicationContext(beans.xml);xml里面的class全部初始化,只有加上lazy-init的类不初始化 ;什么时候用到了什么时候初始化;大部分不用,只有当应用每次启动的时候特别慢的时候可以考
11、虑用。Destory()方法在ClassPathXmlAplicationContext类里面的方法,不是ApplicateionContext接口不能调用。c) init-method destroy-methd 两个属性表示要调用的方法,不要和prototype一起用(了解)49. 在ioc方面用annotation比xml好,但是在aop方面用xml比annotation好;50. Annotation第一步:a) 修改xml文件,参考文档 xmlns:context=http:/www.springframework.org/schema/context/当前xml文件namespac
12、e中的context开头的对应的内容去哪里找。如果引号写在下面也不会有提示。用http开头,是最自然的不会冲突的用法,就像oracle与google发布的标准用各自的网站进行标识,就不会冲突 了。51. Dtd文件是xml文件的规范,现在规范xml文件的是xsd文件。Xml可以引入多个xsd文件。Xsd一般称为xml文件的schema.52. 理解xsl的概念。指扩展样式表语言(EXtensibleStylesheetLanguage)。53. 需要有一个参数为空的构造方法。54. Autowired(不建议使用)a) Autowired(required=false)表示本来应该注入,但是可
13、以没有。不是必须的b) Autowired也可以放在非set方法上,spring自动帮您注入。c) 默认按类型by typed) 如果想用byName,使用Qualifier(name),后面加上名字e) 写在private field(第三种注入形式)(不建议,破坏封装)f) 如果写在set上,qualifier需要写在参数上,g) 在xml文件里配置 55. Resource(重要)c) 加入:j2ee/common-annotations.jard) 默认按名称,名称找不到,按类型e) 可以指定特定名称f) 推荐使用g) 不足:如果没有源码,就无法运用annotation,只能使用xml
14、56. JSR是Java Specification Requests的缩写,意思是Java 规范请求。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。57. Resource(重要)a) 默认的注入方式是byType;b) 加入:j2ee/common-annotations.jarc) 默认按名称,名称找不到,按类型d) 可以指定特定名称e) 推荐使用f) 不足:如果没有源码,就无法运用annotation,只能使用xml58. 在xml文件
15、里加上这句, 所有的bean配置都不需要了。自动去org.example里去找。59. Component Service Controller Repository,默认情况下这些类是我们的组合之一。a) Component当成是一个组件来使用,这样 Resource放在set方法上,就可以直接注入进去。Component指定名字,用Component(“name”),推荐写上名字。b) 初始化的名字默认为类名首字母小写c) 可以指定初始化bean的名字60. Scope用注解默认是:singleton61. PostConstruct = init-method; PreDestroy =
16、 destroy-method;用注解62. 相对来说 aop要比aoc复杂多了。63. 什么是AOP64. 面向切面编程Aspect-Oriented-Programminga) 是对面向对象的思维方式的有力补充b) 加逻辑的方式i. 直接写死的ii. 继承(耦合性不强),没有源码的时候,我们可以用extends的方法来扩展自己需要的程序。iii. 组合代替了继承。(在xml的bean文件里加一个逻辑)65. 动态的把一部分逻辑加到bean上面,叫aop66. 动态代理必须实现一个接口:给我的接口里有哪些方法,我生成的代理里面就有哪些方法。 我们产生的一个代理对象里面实际上包含了一个被代理的
17、对象。public class LogInterceptor implements InvocationHandler private Object target; public Object getTarget() return target; public void setTarget(Object target) this.target = target; public void beforeMethod() System.out.println(method start); Override public Object invoke(Object proxy, Method metho
18、d, Object args) throws Throwable beforeMethod(); method.invoke(target, args); return target; Test public void testProxy() UserDAO userDAO = new UserDAOImpl();/首先产生一个被代理的对象。 LogInterceptor li = new LogInterceptor(); li.setTarget(userDAO);/将被代理的类加入到代理类去。 UserDAO userDAOProxy=(UserDAO)Proxy.newProxyIns
19、tance(UserDAO.class.getClassLoader(),new ClassUserDAO.class, li);/产生代理类。 System.out.println(userDAOProxy.getClass(); userDAOProxy.save(new User();67. 好处:可以动态的添加和删除在切面上的逻辑而不影响原来的执行代码68. Spring两种实现代理的方式 a) Annotationb) 加上对应的xsd文件spring-aop.xsdc) beans.xml d) 此时就可以解析对应的Annotation了e) 建立我们的拦截类f) 用Aspect注
20、解这个类g) 建立处理方法h) 用Before来注解方法i) 写明白切入点(execution .)j) 让spring对我们的拦截器类进行管理Componentk) 常见的Annotation:i. Pointcut(命名切面,下面的可以用它的名字,加在空方法上面。)ii. Beforeiii. AfterReturning(正常执行返回后,拦截)iv. AfterThrowing(拦截异常)v. Aftervi. Around(包围方法,用pjp.proceed()来调用方法,在这语句之前后加逻辑。 Aspectj回在类上来实现的;需要导入aspectj包,在xml里面用,需要加新 的命名
21、空间 xsd文件。Aspectj是专门用来实现 代理的一个框架。AspectJ是一个面向切面的框架,它扩展了Java语言。AspectJ定义了AOP语法所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件.。 Aspectj说明它是一个切面逻辑,可以把它切到其它方法上面去。AspectComponentpublic class LogInterceptor Before(execution(public void com.bjxst.impl.UserDAOImpl.save(com.bjxst.model.User) public void beforeMethod()
22、System.out.println(method start); 还有After,AfterReturning如果没有加Component那么程序就会出错。execution不能写错,写错了会报错,要有返回值都要写上1. 织入点语法a) void !void非void返回值 。b) 参考文档(* .)给切入点的集命名,是用一个方法命名的。一定要写在一个方法上面.上面的service下是没有实现接口的类,所以要加入cglib包。如果类没有实现接口那么spring会直接用操作二进制码的方式,去生成代理的代码。这样需要加一个包(cglib-nodep-2.2.2.jar)如果实现接口就会用jdk自
23、带的proxy来帮你产生代理,但是如果没有实现接口,就会用cglib产生接口,直接更改二进制码。69. xml配置AOP,重点a) 把interceptor对象初始化b) aop:configi. aop:aspect .1. aop:pointcut2. aop:before70. 好处:可以动态的添加和删除在切面上的逻辑而不影响原来的执行代码a) Filterb) Struts2的interceptor,也是这样用的。71. 概念:a) JoinPointb) PointCut(切入点集合)任何类的任何方法的返回任何值的。支入点语法,需要的时候看文档学习,”.”代表无限多个层次。.*.*(.)不管子包里有多少层,里面的任何类任何方法。c) Aspect(切面)d) Advice(建议,加在切入点上的建议跟加在点上的业务逻辑差不多。)e) Targetf) Weave(编织)72. Around Advicea) 责任链模式73. 声明式的事务管理74. Spring整合Hibernate75. Spring里经常用的链接池叫dbcp76. 在beans.xml文件里面配置。需要加上命名空间xmlns:p=http:/www.springframework.org/s
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1