spring-01

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;


你可能感兴趣的:(spring-01)