学习Spring札记_IoC(控制反转)简介
学习Spring笔记_IoC(控制反转)简介
学习内容:Spring2.5.6中的IoC(Inversion of Control)简单介绍。
用到Jar包(可以在附件中下载):spring.jar、commons-logging.jar 。
简单工作过程:spring容器读取相应beans.xml配置文件,通过配置文件中的bean和property利用反射机制(spring容器提供方法)实例化相应类以及实例化该类中属性(类类型)。
IoC控制反转概念:控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系
IoC控制反转核心:bean工厂;在Spring中,bean工厂创建的各个实例称作bean
用具体例子说明Spring IoC用法:
model层(VO):
User.java
package com.yusj.model; public class User { private String username ; private String password ; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "User [username=" + username + ", password=" + password + "]"; } }
DAO层:
IUserDAO.java
package com.yusj.dao; import com.yusj.model.User; public interface IUserDAO { public void save(User user) ; }
UserDAOImpl.java
package com.yusj.dao.impl; import com.yusj.dao.IUserDAO; import com.yusj.model.User; public class UserDAOImpl implements IUserDAO { @Override public void save(User user) { System.out.println("user save success..."); System.out.println(user.toString()); } }
service层:
IUserService.java
package com.yusj.service; import com.yusj.model.User; public interface IUserService { public void add(User user) ; }
UserServiceImpl.java
package com.yusj.service.impl; import com.yusj.dao.IUserDAO; import com.yusj.model.User; import com.yusj.service.IUserService; public class UserServiceImpl implements IUserService { // 为此属性提供setter,getter方法.是为了让Spring容器管理 private IUserDAO userDAO ; public IUserDAO getUserDAO() { return userDAO; } public void setUserDAO(IUserDAO userDAO) { this.userDAO = userDAO; } @Override public void add(User user) { userDAO.save(user); } }
spring所用到的配置文件:
beans.xml
<?xml version="1.0" encoding="UTF-8"?> <!-- spring2.5配置文件固定写法 --> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <!-- 1. 定义一个com.yusj.dao.impl.UserDAOImpl类型的bean. 2. 在Spring容器中通过udi获取相应bean实例. --> <bean id="udi" class="com.yusj.dao.impl.UserDAOImpl"/> <!-- 1. 定义一个com.yusj.service.impl.UserServiceImpl类型的bean. 2. 在Spring容器中通过usi获取相应bean实例 . 3. 在com.yusj.service.impl.UserServiceImpl类中必须定义userDAO属性和其setter,getter方法. 4. ref标签中bean属性必须是在配置文件中已经定义好的. --> <bean id="usi" class="com.yusj.service.impl.UserServiceImpl"> <property name="userDAO"> <ref bean="udi"/> </property> </bean> </beans>
测试结果类:
Test.java
package com.yusj.spring; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.yusj.model.User; import com.yusj.service.IUserService; public class Test { public static void main(String[] args) { /** * Spring提供的读取配置文件方法,此处推荐使用ApplicationContext而非BeanFactory. * beans配置文件默认读取src根目录文件名相同的XML文件 * 如果需要放在特殊的位置,那么需要指定具体路径,比如:com/yusj/xml/beans.xml * */ ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); /** * 获取beans.xml中id="usi"的bean标签所对应的实体类,通过反射机制将其实例化 * 具体实例化过程请见beans.xml文件的详细说明 * */ IUserService service = (IUserService) ctx.getBean("usi"); // 初始化用户并赋值 User u = new User(); u.setUsername("张三"); u.setPassword("zhangsan"); // 添加用户测试 service.add(u); /** * 输出结果: * user save success... * User [username=张三, password=zhangsan] */ } }
Eclipse导出工程见附件(Export -> General -> File System)