软件开发架构平台技术之Spring依赖注入
Spring依赖注入
假如你没有一个非常给力的团队,我只能说与其让别人来找你,不如我去找别人或者组建
自己的团队,Just Go!!! ---------程序员的自我激励
这几天项目忙的差不多了,静静的坐下开始静静的磨刀,接受下一轮更大的挑战,虽然Struts2和hibernate在目前的开发阶段已经够用了,但是为了更好的利用技术,实现更高效快速的开发,我就坐下静静的开始学Sping----一个神秘好玩的东西。
Spring是Rod Johnson这个伟大的人发明的一个框架是开源社区鼎鼎有名的大神级人物。
Spring是一个轻量级框架, Java EE的春天,当前主流框架。
目标: 使现有技术更加易用,推进编码最佳实践
内容: 依赖注入容器,AOP实现(声明式事务), DAO/ORM支持,Web集成
Spring框架的核心技术就是依赖注入和控制反转,从横面和纵面来进行解耦。
今天我开始写自己的第一个Spring Demo,这里使用到了依赖注入,不过在丧心病狂贴代码之前我们要搞清楚为什么要使用是依赖注入?
我们知道面向对象的方法是的我们的系统实现变得容易,但是当我们的系统变得复杂面向对象的方法使我们变得很无力,因为我们要使用大量的对象,系统变得臃肿不好维护。
我们就要采用组建化的方法进行系统的开发。
而依赖注入的目的就是强制将组建的构建和使用分开。
现在不多说了,上代码:
首先是User类:
package com.zdx.model; public class User { private String userName; private String passWord; public User() { } 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; } }
然后是UserDAO类:
package com.zdx.dao; import com.zdx.model.User; public interface UserDAO { public void save(User user); }
其次是UserDAOImpl类:
package com.zdx.dao; import com.zdx.model.User; public class UserDAOImpl implements UserDAO { @Override public void save(User user) { System.out.println("11111111111111111111111111"); } }
然后是UserService类:
package com.zdx.service; import com.zdx.dao.UserDAO; import com.zdx.dao.UserDAOImpl; import com.zdx.model.User; public class UserService { private UserDAO userDAO; public void addUser(User user) { this.userDAO.save(user); } public UserDAO getUserDAO() { return userDAO; } public void setUserDAO(UserDAO userDAO) { this.userDAO = userDAO; } }
然后比较关键的就是beans.xml,Spring容器通过此配置文件创建并管理对象
这里要注明的是DI有两种方式,一种是设值注入,一种是构造注入。
设置注入可以用内部注入和外部注入。
<?xml version="1.0" encoding="UTF-8"?> <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"> <bean name="user" class="com.zdx.model.User"></bean> <bean name="userDao" class="com.zdx.dao.UserDAOImpl"></bean> <bean name="userService" class="com.zdx.service.UserService"> <!-- name要和类属性的命名一致 --> <property name="userDAO" ref="userDao"></property> <!-- 下面这种使用匿名对象的方式同样可以达到相同的效果 <property name="userDAO"> <bean class="com.zdx.dao.UserDAOImpl"> </bean> </property> --> </bean> </beans>
然后就是Test类了
package com.zdx.test; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.zdx.model.User; import com.zdx.service.UserService; public class TestSpring { @Test public void testSpring() throws Exception { ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); UserService service=(UserService) ctx.getBean("userService"); User user=(User) ctx.getBean("user"); service.addUser(user); } }
运行后就会出现输出:
11111111111111111111111111