1.实体类
User.java
package com.test.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; } }
2.数据访问对象(dao-data access object)
UserDAO.java
package com.test.dao; import com.test.model.User; public interface UserDAO { public void save(User user); }
3.实现dao层类
UserDAOImpl.java
package com.test.dao.impl; import com.test.dao.UserDAO; import com.test.model.User; public class UserDAOImpl implements UserDAO { public void save(User user) { System.out.println("user saved!"); } }
4.服务类
UserService.java
package com.test.service; import com.test.dao.UserDAO; import com.test.model.User; public class UserService { private UserDAO userDAO; public void add(User user) { userDAO.save(user); } public UserDAO getUserDAO() { return userDAO; } public void setUserDAO(UserDAO userDAO) { this.userDAO = userDAO; } }
5.依赖注入userDao(以下是核心部分)
(1)配置文件
beans.xml
<beans> <bean id="userDAOImpl" class="com.test.dao.impl.UserDAOImpl" /> <bean id="userService" class="com.test.service.UserService"> <property name="userDAO" bean="userDAOImpl" /> </bean> </beans>
说明:property标签中name属性值(userDao)是UserService服务类中的成员变量,在此配置文件中,它配置的实现类是UserDAOImpl。
(2)bean工厂接口类
BeanFactory.java
package com.test.spring; public interface BeanFactory { public Object getBean(String id); }
(3)实现bean工厂类
ClassPathXmlApplicationContext.java
package com.test.spring; import java.lang.reflect.Method; import java.util.HashMap; import java.util.List; import java.util.Map; import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; public class ClassPathXmlApplicationContext implements BeanFactory { private Map<String, Object> beans = new HashMap<String, Object>(); // IOC(Inverse of Control):控制反转 // DI(Dependency Injection):依赖注入 public ClassPathXmlApplicationContext() throws Exception { SAXBuilder sb = new SAXBuilder(); Document doc = sb.build(this.getClass().getClassLoader().getResourceAsStream("beans.xml")); // 构造文档对象 Element root = doc.getRootElement(); // 获取根元素beans List list = root.getChildren("bean");// 取名字为bean的所有元素 for (int i = 0; i < list.size(); i++) { Element element = (Element) list.get(i); String id = element.getAttributeValue("id"); String clazz = element.getAttributeValue("class"); Object o = Class.forName(clazz).newInstance(); beans.put(id, o); for (Element propertyElement : (List<Element>) element.getChildren("property")) { String name = propertyElement.getAttributeValue("name"); // userDAO String bean = propertyElement.getAttributeValue("bean"); // userDAOImpl Object beanObject = beans.get(bean);// UserDAOImpl实例 String methodName = "set" + name.substring(0, 1).toUpperCase() + name.substring(1); // 指定对象o本身的类的methodName方法的参数为:beanObject实现的那个接口 Method m = o.getClass().getMethod(methodName, beanObject.getClass().getInterfaces()[0]); // 调用对象o中的methodName方法(参数为:UserDAOImpl实例),相当于o.methodName(beanObject); m.invoke(o, beanObject); } } } public Object getBean(String id) { return beans.get(id); } }
6.jUnit测试类
UserServiceTest.java
package com.test.service; import org.junit.Test; import com.test.model.User; import com.test.spring.BeanFactory; import com.test.spring.ClassPathXmlApplicationContext; public class UserServiceTest { @Test public void testAdd() throws Exception { BeanFactory applicationContext = new ClassPathXmlApplicationContext(); UserService service = (UserService) applicationContext.getBean("userService"); User u = new User(); u.setUsername("zhangsan"); u.setPassword("123"); service.add(u); } }
相关推荐
本项目为Java项目,使用Spring实现依赖注入,实现采用ApplicationContext,不再直接使用XmlBeanFactory方式。适合初学者了解Spring依赖注入的实现。
包含JS / J_Query API/J2EE 1.5 Struts2/Spring2.0 /Hibernate3.2/ Html Help /CSS2.0/CSS Filter 2.0 / MySql 5.1 参考文档
本项目为Java项目,使用Spring实现依赖注入,适合初学者了解Spring依赖注入的实现。
Spring AOP面向方面编程原理Spring AOP面向方面编程原理Spring AOP面向方面编程原理Spring AOP面向方面编程原理Spring AOP面向方面编程原理Spring AOP面向方面编程原理Spring AOP面向方面编程原理
spring 4.3.2全部jar,转自官网:...
该项目包含helloworld(快速入门)、web(ssh项目快速搭建)、aop(切面编程)、data-redis(redis缓存)、quartz(集群任务实现)、shiro(权限管理)、oauth2(四种认证模式)、shign(接口参数防篡改重放)、encoder(用户...
Spring Framework 4.x Reference Documentation 中文翻译 Chinese translation of the Spring Framework 4.x Reference Documentation ...
Spring,面向切面编程AOP例子!AOP(Aspect Oriented Programming)!
Spring-aop面向切面编程实例 日志系统,权限控制等.
16.2 Spring框架-AOP面向切面编程
Spring4AOP 面向切面编程实例之方法拦截实例 一下利用Spring4的最后一个版本Spring4.3.9,实现简单的方法拦截实例。 Eclipse 建立java工程,导入必要的jar包,工程目录如下:
spring-framework-3.2.5.RELEASE-dist中国开源社区http://maven.springframework.org/release/org/springframework/spring/3.2.5.RELEASE/
对于bean的理解,希望大家是把他看成Object对象,他可以是任何对象,甚至是接口,甚至是抽象方法,当然,具体用法大家在以后的使用中会有所认识的; 写一个简单的bean类 ```java package mybatis.study.start.bean...
NULL 博文链接:https://huangminwen.iteye.com/blog/1874200
NULL 博文链接:https://countme.iteye.com/blog/1132555
从零开始学Spring Boot,没有...16)Spring Boot使用Druid(编程注入)【从零开始学Spring Boot】 http://412887952-qq-com.iteye.com/blogs/2292376 (17)Spring Boot普通类调用bean【从零开始学Spring Boot】: ...
Spring4.0+Hibernate4.0+Struts2.3整合案例:实现增删改查。 ===================== application.xml: xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=...
Spring框架概述Spring是什么Spring的历史Spring的使命(Mission Spring包含的模块Spring的IoC容器用户注册的例子面向接口编程
logback与spring集成的文件,从官网上找的。上传的文件包括源文件和jar包,以下是连接: https://github.com/qos-ch/logback-extensions/wiki/Spring ...