spring2.5 学习笔记(2)

2019-08-29 23:15

spring2.5 学习笔记 第6页 共46页

实现的功能:当类初始化时, 一、 程序会根据此配置文件初始化文件所有的bean元素所代表的类,放入一个容器中(使用Map),然后在需要时,会根据ID值,取出这个对象; 1、 代码: public class ClassPathXmlApplicationContext implements BeanFactory { private Map beans = new HashMap(); public ClassPathXmlApplicationContext() throws Exception{ SAXBuilder sb=new SAXBuilder();//创建一个SAXBuilder对象 Document doc=sb.build(ClassPathXmlApplicationContext.class.getClassLoader().getResourceAsStream(\eans.xml\)); //构造文档对象 Element root=doc.getRootElement(); //获取根元素 //System.out.println(root.getName()); List list=root.getChildren(\);//取名字为disk的所有元素 for(int i=0;i beans = new HashMap(); public ClassPathXmlApplicationContext() throws Exception{ SAXBuilder sb=new SAXBuilder();//创建一个SAXBuilder对象 Document UserService service = new UserService(); //UserService service = (UserService)factory.getBean(\ UserDao userDao = (UserDao)factory.getBean(\);//此得只需要根据ID就可以取得Bean对象来使用 service.setUserDao(userDao); User u = new User(); service.add(u); return beans.get(name); public Object getBean(String name){ doc=sb.build(ClassPathXmlApplicationContext.class.getClassLoader().getResourceAsStream(\ns.xml\)); //构造文档对象

spring2.5 学习笔记 第7页 共46页

Element root=doc.getRootElement(); //获取根元素 List list=root.getChildren(\);//取名字为disk的所有元素 for(int i=0;i)element.getChildren(\)){ //获取property子元素中 属性为name的值(也就是需要注入的参数名称) String name = propertyElement.getAttributeValue(\); //获取property子元素中 属性为bean的值 (需要注入参数的类型),此处的bean值是已经在上面初始化好了的bean String bean = propertyElement.getAttributeValue(\); //因此此处获取指定ID的bean Object beanObject = beans.get(bean); //组成set方法名称:set + 第一个字母大写 + 其它的字母 String methodName = \ + name.substring(0,1).toUpperCase() + name.substring(1); System.out.println(\ + methodName); //获取bean的set方法,参数(方法名,参数:此参数的类型) Method m = o.getClass().getMethod(methodName, 的ID了。 beanObject.getClass().getInterfaces()[0]); //使用反映机制,执行method方法,从而实现注入功能 m.invoke(o, beanObject); } } } public Object getBean(String name){ return beans.get(name); } } 注意,以上有背景色的部分是实现自动装配(注入)的代码。 2、 测试 public void testAdd_3() throws Exception { } BeanFactory factory = new ClassPathXmlApplicationContext(); UserService service = (UserService)factory.getBean(\); //以下两行代码在实现注入功能后,将不再需要,因为程序在加载时,已经帮我自动注入这个参数了。 //UserDao userDao = (UserDao)factory.getBean(\ //service.setUserDao(userDao); User u = new User(); service.add(u);

BeanFactory接口代码: spring2.5 学习笔记 第8页 共46页

public interface BeanFactory { } public Object getBean(String name); 第四课:搭建sping的运行环境

一、 建立一个新的项目

a) b)

建立新的项目; 建立需要的bean类

二、 建立spring的配置文件

你可以在spring文件中复制代码 三、 引入spring的jar包

可以建立一个User Library

搭建spring环境基本的包:spring.jar和commons-logging.jar

四、 测试代码:

public void testAdd_3() throws Exception { } BeanFactory factory = new ClassPathXmlApplicationContext(\); UserService service = (UserService)factory.getBean(\); User u = new User(); service.add(u); 注意:这里使用的ClassPathXmlApplicationContext和BeanFactory是spring的,如下: import org.springframework.beans.factory.BeanFactory; import org.springframework.context.support.ClassPathXmlApplicationContext; spring2.5 学习笔记 第9页 共46页

五、 注意接口的使用:

ClassPathXmlApplicationContext类实现了ApplicationContext接口,而ApplicationContext接口又实现了BeanFactory接口,这样BeanFactory是根上的接口。一般建议使用ApplicationContext接口,因为: 1、BeanFactory:只是完成Bean工厂的基本功能,不能完成bean的生命周期 2、ApplicationContext:除了完成bean工厂的基本功能外,还完成的其它的附加功能(比如:bean的生命周期),也就是功能更强大 这样上面的代码就是 } ApplicationContext factory = new ClassPathXmlApplicationContext(\); UserService service = (UserService)factory.getBean(\); User u = new User(); service.add(u); public void testAdd_3() throws Exception { 第五课:IOC(DI)配置及应用

一、 什么是IOC、DI

IOC: Inversion of Control控制反转:原来类的一些成员属性(例如UserService中的userDao成员属性)是由当前类(UserService)自己控制,现在不是由当前类(UserService)自己控制,而是由容器(运行环境上下文、Spring)帮我们来控制。

还是一种说法:原来我们自己控制是控制实现,而现在Spring是利用接口来控制的。所以我们由原来控制实现转为springg现在来控制接口(向上反转)

作用:实例化具体的bean

动态装配bean

(本来是由我来控制的,现在我交给容器来控制。)

DI:Dependency Injection依赖注入:一些成员属性(例如UserService中的userDao成员属性) 依赖Spring容器来注入 好处:偶合性相对来降低了;另外,注入是使用配置文件来实现,这样修改来非常的方便.

DI与IOC相对来说 是一样的概念。

二、 编辑xml文件时,没有提示

1、 window – preferences – myeclipse – Files and Editing - xml – xml catalog 2、 add按钮

i. ii. iii. iv.

Location: D:\\share\\0900_Spring\\soft\\spring-framework-2.5.6\\dist\\resources\\spring-beans-2.5.xsd URI: Key:

file:///D:/share/0900_Spring/soft/spring-framework-2.5.6/dist/resources/spring-beans-2.5.xsd

Key Type: Schema Location

http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

三、 注入类型(Injecting dependencies)

1、 setter(重要)

2、 构造方法(使用的非常少) 3、 接口注入(可以忘记)

(一) setter注入类型Setter Injection } spring配置文件如下: spring2.5 学习笔记 第10页 共46页

就是在bean中使用setXXX方法进行注入来 在bean类中,成员属性需要setXXX方法如下: private UserDao userDao = new UserDaoImpl(); public UserDao getUserDao() { } public void setUserDao(UserDao userDao) { } public void add(User u){ userDao.save(u);} this.userDao = userDao; return userDao; public class UserService { (二) 构造方法Constructor Injection 首先在bean类中需要有成员属性作为参数的构造方法 } 注意:背景较深的代码为构造方法,带有参数的构造方法 代码如下: private UserDao userDao = new UserDaoImpl(); public UserService(UserDao userDao) { } public UserDao getUserDao() {return userDao;} public void setUserDao(UserDao userDao) { this.userDao = userDao;} public void add(User u){ userDao.save(u);} super(); this.userDao = userDao; public class UserService { spring配置文件如下:

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: