标签:
Spring是一个开源的控制反转(Inversion of Control ,IoC)和面向切面(AOP)的容器框架.它的主要目得是简化企业开发.
IOC:所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,
控制权的转移就是所谓反转。也叫DI,依赖注入,容器负责把依赖的具体对象注入到上层对象,而上层对象只需要提供一个接口声明。
类似于hibernate 一对多关系里面的inverse,把关系维护的重任交给对方,自己专心业务,与对方如何变化无关,全部由对方(spring容器)
来进行维护。
AOP:面向切面的编程。很多功能都要有这么一个业务,并且该业务对所有功能是基本一样的,可以考虑把该业务做成一个切面。
像servlet里的filter,Struts里的interceptor等都是一些好办法,aop是spring提供的解决方案,他们的底层都是采用代理模式。
先到官方网站下载spring项目,采用3.x,4.x均可。目前最好用最新的,我采用的4.1.5版本。
网址:
http://repo.springsource.org/libs-release-local/org/springframework/spring/
Spring开发典型步骤
注意文件名不要起错, applicationContext.xml
<?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.xsd"> <bean id="userDao" class="ytu.icoding.dao.UserDao"></bean> <bean id="userAction" class="ytu.icoding.action.UserAction"> <property name="dao" ref="userDao"></property> <!-- 该属性name要和关联类里自定义的属性名称对应起来 --> </bean> <bean id="user" class="ytu.icoding.entity.User"> <constructor-arg name="name" value="张三"></constructor-arg> <constructor-arg name="age" value="18"></constructor-arg> </bean> </beans>
建立好要用到的测试类:
package ytu.icoding.dao; public class UserDao { public void getUser(){ System.out.println("I get a user"); } }
package ytu.icoding.action; import ytu.icoding.dao.UserDao; public class UserAction { private UserDao dao; public UserDao getDao() { return dao; } public void setDao(UserDao dao) { this.dao = dao; } public void getUser(){ dao.getUser(); } }
package ytu.icoding.entity; public class User { private String name; private int age; public User(){} public User(String name, int age) { super(); this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
package ytu.icoding.test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import ytu.icoding.action.UserAction; import ytu.icoding.entity.User; public class Test { public static void main(String[] args) { ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml"); UserAction user =(UserAction) ctx.getBean("userAction"); user.getUser(); System.out.println("-------------"); User u =(User) ctx.getBean("user"); System.out.println(u.getName()); System.out.println(u.getAge()); System.out.println("----------------"); } }
在配置文件中,采用了依赖注入为UserAction注入了UserDao,注意要在UserAction中声明UserDao属性并生成get,set方法,配置中
<property name="dao" ref="userDao"></property> name,ref一定要对应好。
采用了构造方法为User注入了属性和对应的值value。
在类路径下寻找配置文件来实例化容器
ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"});
方法二:
在文件系统路径下寻找配置文件来实例化容器
ApplicationContext ctx = new FileSystemXmlApplicationContext(new String[]{“d:\\applicationContext.xml“});
Spring的配置文件可以指定多个,可以通过String数组传入。
注意:
1. Bean标签有个scope属性,取值分别是singleton,prototype,request,session
每一次采用spring框架获取javabean,方式分别是,永远一个实例,每次一个实例,每次请求一个实例,每次会话一个实例。
2. 实例化bean的三种方式:
(1.使用类构造器实例化
<bean id="userService" class="com.jmt.service.impl.UserServiceBean"></bean>
(2.使用静态工厂方法实例化
<bean id="userService2" class="com.jmt.service.impl.UserServiceBeanFactory"
factory-method="createUserServiceBean"/>
(3.使用实例工厂方法实例化:
<bean id="userServiceFactory" class="com.jmt.service.impl.UserServiceBeanFactory"/>
<bean id="userService3" factory-bean="userServiceFactory" factory-method="createUserServiceBean2"/>
一般情况下用第一种。
标签:
原文地址:http://www.cnblogs.com/wangzh1y1011/p/5728680.html