收藏 分享(赏)

Spring备课内容.doc

上传人:kpmy5893 文档编号:7857352 上传时间:2019-05-27 格式:DOC 页数:13 大小:191.50KB
下载 相关 举报
Spring备课内容.doc_第1页
第1页 / 共13页
Spring备课内容.doc_第2页
第2页 / 共13页
Spring备课内容.doc_第3页
第3页 / 共13页
Spring备课内容.doc_第4页
第4页 / 共13页
Spring备课内容.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

1、12012A Srping 第一节课内容:2011/11/15 晚第一点:怎么去看待 Srping 框架。回顾我们之前写过的程序的基本结构:Dao daoImpl Factory (其中应用到了单模式) Service ServiceImpl 、Action 中应用到了 ServiceImpl。那么这个时候我们是否想过我们这样做有哪些缺点?首先 我们应用了很多的工厂类(用工厂的目的是什么呢?) , 在程序的代码中 new 很多对象,那么这个时候我们对这些配置并没有统一的去管理,而是散落在各个 javaBean 中。为了使这一部分能够统一的进行系统的管理, 我们引入了 Spring 框架。例如:

2、1、ServiceImpl 中用到了 daoImpl 对象,我们说: servieImpl 依赖于 daoIMpl, 这是一种依赖关系, action 中用到了 serviceImpl 我们知道 action 依赖于 serviceImpl, 他们都有这种依赖关系。2 另一种情况: hibernate 中的 session 创建,事务的开启和关闭, 都是我们手动来管理的, hibernate 来处理的,但是这个时候我们也可以交个 spring 来处理, 也就是说。 我们将对象的创建和这种依赖关系、事务交给 Spring。 。 。处理。本来我们的处理可以理解为 A 类用到 B 类,那么 A 是直

3、接的去拿 B 类的东西。用到 Spring 后, 我们只需要在 Spring 中声明,A 和 B 的关系, 告诉 A 你用到了 B,通过 Srping 主动的将 B 的对象给(注入给)A 。这是我们应用到 Spring 后跟以往不同的第一个地方。通过以上的内容我们知道了 Srping 能够为我们做什么!我们必须知道:依赖性注入含义。含义:当我们需要使用一个类的对象时,我们不需要自己找这个对象, 而是通过第三方容器给我们注入进来。第二点:刚开始学 Spring 我们需要了解几个关键的词语:IOC:Inversion of Control(控制反转):Ioc 说白了,就是容器控制程序之间的关系。而

4、非传统的程序代码直接控制。所谓控制反转就是控制权有应用代码中转移到外部容器中,控制权的转移,即所谓的反转。DI: Dependency Injection (依赖性注入)AOP:Aspect-Oriented Programming(面向切面编程)ORM:对象关系映射(Srping 框架中的,而是 hibernate 和 ibatis 比如我们的表和 vo 以及配置 xml 文件映射表)第三点: 了解 Srping 的核心:即 IOC 容器该容器提供了 Srping 的基本功能。 该容器的的主要组件是 BeanFactory,他是工厂模式的实现,BeanFactory 使用控制反转(IOC)

5、模式将应用程序的配置和依赖性规范与实际的应用程序代码分开(说白了就是将一切对象的创建交给了 Srping 处理)第四点: 了解 Srping 源文件包的内容:dist: 存放 Spring 的核心 Jar 文件、doc:存放 Srping 的帮助文档、2lib: 该目录存放 Srping 的第三方 Jar 文件,例如整合时候我们用到的某些文件sample:存放 Spring 提供的一些实力程序src:存放 Spring 框架的所有源文件第五点: 我们写一个基本的依赖注入关系需要的 Jar 包:dist/spring.jarlib/Jakarta-commons/commons-logging.

6、jarlib/log4j/log4j-1.2.14.jar应用上面的三个 jar 包即可来完成依赖注入关系。第六点: Srping 的注入方式:第一点是构造方法的注入、第二点是 set 方法的注入,第三种接口注入(不讲,不常用因为侵入性强)构造方法和 set 方法注入的区别:(时机早晚有差别:构造方法注入时间比 setter 时间早)构造方法会在实例化 Manager 的时候直接就将实例化好的 sqlServerDaoImp(以上面的为例)对象注入进来,时机比较早。Set 方法注入:将 Manager 实例化后,再调用 setDao 方法将 sqlServerDaoImpl 对象注入进来。 为

7、什么常用 set 而不用构造方法这种方式注入?依赖的对象较多时, 构造方法的注入方式会显得构造方法非常的冗长,setter 方法显示直观。所以应用上以 set 方法为主。第七点: 我们应用 Spring 时候需要获取 bean。以下是获取 beanFactory 的方法。31、常用的是BeanFactory bean=new ClassPathXmlApplicationContext(“applicationContext.xml“);UserService service=(UserService) bean.getBean(“userServiceImpl“);service.inser

8、t();2、常用的的是:ApplicationContext context = new ClassPathXmlApplicationContext(“applicationContext.xml“);PersonService service= (PersonService) context.getBean(“PersonServiceImpl“);2012A Spring第二节课内容: 1、 在Spring中最基本的注入:这里我们讲解 String类型、String数组、List 、Map、Set以及对象、还有日期类型(其中包含属性编辑器)的注入。注意:在对日期类型的注入处理中,我们需要

9、单独对日期进行处理,因为在Spring的配置文件中,默认的元素都默认为字符串,那么我们要告诉Spring某个变量是日期才行。2、 具体的注入方法如下:通过set方法注入的,以下是往ZygServieImpl类中注入这些变量value值,以下都是值的注入。(1)String类型:aaa(2)String数组:abc(3)List 集合:4aaaddd(4)Map 集合:aaa(5)Set 集合:set1(6)最麻烦的日期类型的处理:首先要写一个属性编辑器:目的是通过属性编辑器来讲就是对日期格式的字符串来转化为日期类型,然后将此内容在Spring中声明。属性编辑器写法:此编辑器就是一个java类,

10、此类必须 继承java.beans.PropertyEditorSupport; 重写setAsText 方法。 具体代码如下:import java.beans.PropertyEditorSupport;import java.text.Format;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class Editor extends PropertyEditorSupportprivate String format=“yyyy-MM-dd“;

11、Overridepublic void setAsText(String str) throws IllegalArgumentException / TODO Auto-generated method stubDate day;try day = new SimpleDateFormat(format).parse(str);setValue(day); catch (ParseException e) / TODO Auto-generated catch blocke.printStackTrace();5Spring文件的配置:以上是为了注入我们写的Editor属性编辑器,下面是对日

12、期的注入。1987-10-12(7)、Spring中公共属性的注入:addresszyg24plr25123321(8)、Spring 中多个applicationContext.xml 的处理以及配置。在Spring 中多个applicationContext.xml 我们可以分为多个, 例如:applicationContext.xml applicationContext-user.xml applicationContext_admin.xml 这种多个配置文件,在 Spring中都视为是同一个配置文件。 6(9)Spring的Bean作用域即: 我们之前new对象创建对象的时侯可以n

13、ew多个例如:User user1=new User();User user2=new User();在Spring中怎么来创建多个对象呢?默认是singleton,我们以后可以不用设值此属性。我们通用singleton 即可。第三节课内容:Spring的自动装配:按名字装配、按照类型装配。 (并不常用,我们开发中最好是直接由我们自己来完成依赖关系的声明,因为这样很清晰的看到Bean的依赖关系)知识点:第一点:Spring框架的配置文件可以根据名称装配,也可以按照类型装配Bean的关系。例如:Bean1类:public class Bean1 private String name;publi

14、c String getName() return name;public void setName(String name) this.name = name;Bean2类:public class Bean1 private String name;public String getName() 7return name;public void setName(String name) this.name = name; 配置文件:按照名称自动装配:根据id 找依赖关系。这里是beans 标签中的内容:声明default-autowire属性:default-autowire=“byNam

15、e“zyg按照类型自动装配:根据class找依赖关系。default-autowire=“byType“zyg手动装配:必须通过ref属性或者标签指定我们想要的依赖关系。zyg以上是三种装配的方式的比较。8测试类的测试方法:public static void main(String args) BeanFactory bean=new ClassPathXmlApplicationContext(“applicationContext.xml“);Bean2 bean2=(Bean2) bean.getBean(“bean2“);System.out.println(bean2.getBea

16、n1().getName();第二点:(作为了解、并不重要)延迟初始化bean :lazy-init=“true“可见帮助文档的例子,看看他放到了那个位置。使用延迟加载bean的时候, 在应用一个具体bean时候才进行实例化。不适用延迟加载的时候, 在ApplicationContext进行实例化时候,所有bean已经给我们都实例化好了。什么时候用: 应用启动很慢的时候才用这个, 所以很少用。第三点:(了解即可)init-method 和destroy-method 的应用在Spring配置中, 通过init-method 和destroy-method 属性指定某个bean在加载时开始和结束

17、执行的两个方法。例如:测试类:public static void main(String args) ClassPathXmlApplicationContext bean=new ClassPathXmlApplicationContext(“applicationContext.xml“);Bean2 bean2=(Bean2) bean.getBean(“bean2“);System.out.println(bean2.getBean1().getName();bean.destroy();配置文件:这里参数指定的是方法名字。Bean2这个类中含有init和destroy两个方法,分别

18、输出两行不同内容。 结果老师就不粘贴出来了。第四节课:AOP 的应用: java的静态代理和动态代理。年11月20日晚我们什么时候可以应用代理? 为什么要用到代理?例如: 我们对某个实现类中的方法进行记录日志,对其记录处理消息等, 也就是说进行安全性检查, 此时我们需要对每个方法中调用一个安全性检查或者记录的方法。 这样这些进行安全性检查的方法就会侵入我们的这些实现类,但这些侵入进来的方法并没有参与我们需要的业务逻辑,并且他散落在实现类中,那么此时我们就要考虑了,怎么不让他破坏我们的实现类。-应用代理类。9使用代理前的实例:此时可以看到我们的Impl类受到侵入。接口:public interf

19、ace UserDao public int insert();public void delete() ;实现类:public class UserDaoImpl implements UserDaopublic void delete() control(“delete方法开始:“);System.out.println(“-delete方法执行 -“);control(“delete方法结束:“);public int insert() control(“Insert方法开始:“);System.out.println(“-insert方法执行 -“);control(“Insert方法

20、结束:“);return 0;/此时control方法跟我们的业务逻辑没有关系。并且他侵入了我们的业务逻辑类。/而且我们的Impl类受到破坏public void control(String a)System.out.println(a);测试类:public class Test_1 /* param args*/public static void main(String args) UserDao userDao=new UserDaoImpl();userDao.insert();10结果:Insert方法开始:-insert方法执行-Insert方法结束:静态代理:由程序员创建或由

21、特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。例如:接口同上不变。实现类:public class UserDaoImpl implements UserDaopublic void delete() System.out.println(“-delete方法执行-“);public int insert() System.out.println(“-insert方法执行-“);return 0;代理类:public class UserDaoImpl_Proxy implements UserDaoprivate UserDaoImpl userDa

22、o;public UserDaoImpl_Proxy(UserDaoImpl userDao)this.userDao=userDao;public void delete() control(“delete方法开始:“);userDao.delete();control(“delete方法结束:“);public int insert() control(“insert方法开始:“);userDao.insert();control(“insert方法结束:“);return 0;11public void control(String a)System.out.println(a);测试类

23、只要使用代理类就可以达到我们的要求:测试类如下:public class Test_2 /* param args*/public static void main(String args) UserDao proxy=new UserDaoImpl_Proxy(new UserDaoImpl();proxy.delete();结果:delete方法开始:-delete方法执行-delete方法结束:知识点:如下:通过上面的例子我们知道: 这些嵌入的方法,我们可以叫做横切性关注点。 我们可以将这些横切性关注点来提取出来, 封装到一个类中,然后在运行时,直接给我们将这些方法横切进去。 这也就是我

24、们的思想, 我们现在学习的就可以实现这一点。注意: Spring的AOP 机制就是采用JDK中的动态代理机制实现的。下面我们看看的动态代理模式:动态代理:注意:我们采用动态代理,上面我们写过的那个代理类就不存在了,而是在我们运行时自动生成。应用的动态代理需要实现java.lang.reflect.InvocationHandler 接口。实现invoke方法: 例如:import java.lang.reflect.InvocationHandler;12import java.lang.reflect.Method;import java.lang.reflect.Proxy;public

25、class UserDaoImpl_Proxy2 implements InvocationHandlerprivate Object targetObject;/目标对象,被代理的对象private Object proxyObject;/代理对象public Object newProxyObject(Object targetObject)/生成代理对象的方法。this.targetObject=targetObject;return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(), targetObject

26、.getClass().getInterfaces(),this);/第三个参数是:我们要传递一个实现了InvocationHandler的对象/当调用代理类对象时候,默认就会调用invoke、方法。public Object invoke(Object arg0, Method arg1, Object arg2)throws Throwable / 把我们这些横切性问题都模块化control(arg1.getName()+“开始:“);Object ret=null;ret=arg1.invoke(this.targetObject, arg2);return ret;public voi

27、d control(String a)System.out.println(a);测试类:import com.cstp.dao.UserDao;import com.cstp.daoImpl.UserDaoImpl;import com.cstp.daoImpl.UserDaoImpl_Proxy2;public class Test_3 /* param args13*/public static void main(String args) / TODO Auto-generated method stubUserDaoImpl_Proxy2 proxy=new UserDaoImpl_Proxy2();UserDao dao=(UserDao) proxy.newProxyObject(new UserDaoImpl();/通过此方法创建代理对象dao.delete();重点: Spring对AOP 的支持: 首先介绍Annotation 的注解方式:需要加入jar为lib/aspect/*jar

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报