1.导入spring的dist下的jar包(新版为libs文件夹)和apache.commons.logging包 2.在src下新建beans.xml 3.beans.xml添加schema文件: <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"> </beans> 4.新建一个类 5.beans.xml中创建对象 <bean id="helloSpring" class="org.zttc.spring01.model"/> <!-- 创建以上bean等于完成了:HelloSpring helloSpring=new HelloSpring() --> 6.在测试类中使用对象 6.1创建spring工厂 6.2通过spring工厂获取对象 //////////////spring 依赖注入///////////////////////////// 1.将所有的类在beans.xml中创建 2.对有依赖的类完成注入 2.1为每一个依赖类创建相应的geeter()和setter() ////////////////////////////////////////// <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"> <bean id="helloSpring" class="org.zttc.spring01.model.HelloSpring" scope="prototype"/> <!-- 创建以上bean等于完成了:HelloSpring helloSpring=new HelloSpring() --> <bean id="user" class="org.zttc.spring01.model.User"> <property name="id" value="2"/> <property name="username" value="八戒"/> </bean> <!-- 创建了一User[id=2,name="八戒"]的对象,如果要注入值,不使用ref,而是value--> <bean id="userDao" class="org.zttc.spring01.dao.UserDao"/> <bean id="userService" class="org.zttc.spring01.service.UserService"> <!-- autowire="byName"自动根据名称注入,no不自动注入,byType根据类型注入,但是如果有2个以上同类型属性就会抛异常 所以实际开发中一般使用byName,自动注入无法掌控注入的属性类,不建议使用--> <!-- <property name="userDao" ref="userDao"></property> --> <!-- property根据setXX注入:name中的值会在userService对象中调用setXXX方法来注入,例如:name="userDao", 在具体注入时会调用setUserDao(IUserDao userDao)来完成注入 ref="userDao"表示配置文件中的bean中所创建的DAO的id --> <!-- <property name="userDao" ref="userDynamicDao"/> --> <!-- Spring动态AOP支持 --> <property name="userDao" ref="userDao"/> </bean> <!-- 对于UserAction而言,里面属性的值会根据不同的线程得到不同的值,所以应该使用多例 --> <bean id="userAction" class="org.zttc.spring01.action.UserAction" scope="prototype"> <property name="userService" ref="userService"></property> <!-- constructor-arg构造函数注入,不常用,基本都是set()注入 --> <!-- <constructor-arg ref="userService"></constructor-arg> --> <property name="user" ref="user"/> <property name="id" value="12"/> <!-- 同样可以注入列表,也不常用 --> <property name="names"> <list> <value>aaa</value> <value>bbb</value> <value>ccc</value> <!-- <ref></ref> --> </list> </property> </bean> <!-- Spring 静态AOP package org.zttc.spring02 etc --> <bean id="userDynamicDao" class="org.zttc.spring02.proxy.LogProxy" factory-method="getInstance"> <constructor-arg ref="userDao"/> </bean> <bean id="messageDynamicDao" class="org.zttc.spring02.proxy.LogProxy" factory-method="getInstance"> <constructor-arg ref="messageDao"/> </bean> <bean id="messageDao" class="org.zttc.spring02.aop.MessageDao"/> <!-- Spring 动态AOP配置 --> <bean id="logAspect" class="org.zttc.spring02.proxy.LogAspect"/> <aop:config> <!-- 定义切面,一般AOP都是采用XML,因为比Annotation方便 --> <aop:aspect id="myLogAspect" ref="logAspect"> <!-- 在那些位置加入相应的Aspect --> <!-- 错误1:aopallipance.jar和aopallipance.zip,错误2:spring01和sping --> <aop:pointcut id="logPointCut" expression="execution(* org.zttc.spring01.dao.*.add*(..))|| execution(* org.zttc.spring01.dao.*.delete*(..))|| execution(* org.zttc.spring01.dao.*.update*(..))" /> <aop:before method="logStart" pointcut-ref="logPointCut" /> <aop:after method="logEnd" pointcut-ref="logPointCut"/> </aop:aspect> </aop:config> </beans> ///////////////////////////////////// public class TestSpring { //创建spring工厂 private BeanFactory factory=new ClassPathXmlApplicationContext("beans.xml"); @Test public void testHello() { /**通过工厂获取spring的对象 * 此处的factory.getBean("helloSpring")中的helloSpring是 * beans.xml中的id*/ //HelloSpring hello=(HelloSpring) factory.getBean("helloSpring"); HelloSpring hello=factory.getBean("helloSpring",HelloSpring.class); //此时的hello就是被spring所管理的对象 System.out.println(hello.hello()); } @Test public void test02() { HelloSpring hello=factory.getBean("helloSpring",HelloSpring.class); HelloSpring hello2=factory.getBean("helloSpring",HelloSpring.class); /**如果在bean中没有做scope配置,默认是singleton(单例), * 可设置为prototype(多例)*/ System.out.println(hello==hello2); } @Test public void testUser01() { UserAction ua=factory.getBean("userAction",UserAction.class); User u=new User(1,"悟空"); ua.setUser(u); ua.add(); ua.delete(1); ua.load(2); MessageDao md=factory.getBean("messageDao",MessageDao.class); md.add(); /*UserAction ua2=factory.getBean("userAction",UserAction.class); ua2.add();*/ } } ////////////////////// /********构造时注入演示,不推荐**************************************/ public UserAction(IUserService userService) { super(); this.userService = userService; } /*******注入List***************************************/ private List<String> names;