zoukankan      html  css  js  c++  java
  • Spring第一个例子的补充

    1.首先导入需要的包:

     2.文件结构:

    3.先看xml配置文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" " http://www.springframework.org/dtd/spring-beans-2.0.dtd ">
    <beans>
        <!-- 让Spring来管理对象的创建和依赖关系,必须在Spring配置文件中定义 -->
        <!-- 配置需要被Spring管理的bean(创建,创建后放在了Spring IOC容器里面) -->
        <bean name="hello" class="com.wangcf.HelloWorld">
            <!-- 配置该bean需要注入的属性(是通过set方法来注入的) -->
            <property name="name" value="direct"/>
        </bean>
        
        <bean name="userDao" class="com.wangcf.Dao.UserDao"></bean>
        <bean name="userManager" class="com.wangcf.UserManager">
            <!-- 注入Dao的值,value是注入常量值,ref注入引用值 -->
            <property name="userDao" ref="userDao"></property>
        </bean>
    </beans>

    4.1看HelloWorld部分:

    package com.wangcf;
    
    public class HelloWorld {
        private String name;
        
        public HelloWorld(){
            System.out.println("HelloWorld 构造器开始创建。。。");
        }
        public void setName(String name) {
            System.out.println("setName..把name的值注入....");
            this.name = name;
        }
        
        public void show(){
            System.out.println("HolloWorld show..."+name);
        }
        
        
    }
    package com.wangcf.Test;
    
    import org.springframework.beans.factory.BeanFactory;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.wangcf.HelloWorld;
    
    import junit.framework.TestCase;
    
    public class HolloWorldTest extends TestCase{
        public void test1(){
            //获取Spring的applicationContext配置文件,注入IOC容器中
            BeanFactory factory=new ClassPathXmlApplicationContext("applicationContext.xml");
            /**完成上面的步骤,就会打印:
            *HelloWorld 构造器开始创建。。。
            *setName..
            *说明一开始就把类的属性,注入了
            **/
            //通过BeanFactory的getBean方法,从IOC容器里面获取Bean
            Object obj=factory.getBean("hello");
            System.out.println(obj.getClass().getName());
            HelloWorld hw=(HelloWorld) obj;
            System.out.println(hw);
            hw.show();
            //通过BeanFactory的getBean方法,从IOC容器里面获取Bean
            HelloWorld hw2=(HelloWorld) factory.getBean("hello");
            System.out.println(hw2);
        }
    }

    打印:

    由此可见,在执行

     BeanFactory factory=new ClassPathXmlApplicationContext("applicationContext.xml");

    的时候,就把配置文件里面的东西执行了。

    5.1看UserManager部分:

    package com.wangcf;
    
    import com.wangcf.Dao.UserDao;
    
    public class UserManager {
        
        private UserDao userDao;
        //通过set方法注入Dao,这里注入的不是常量值,而是引用值
        public void setUserDao(UserDao userDao) {
            System.out.println("UserManager UserDao setUserDao..把Dao注入到UserManager容器");
            this.userDao = userDao;
        }
        
        public void addUser(){
            System.out.println("UserManager addUser");
            userDao.addUser();
        }
        
        public UserManager(){
            System.out.println("UserManager 开始创建....");
        }
    }
    package com.wangcf.Dao;
    
    public class UserDao {
         public void addUser(){
             System.out.println("UserDao addUser");
         }
         
         public UserDao(){
             System.out.println("UserDao开始创建.....");
         }
    }
    package com.wangcf.Test;
    
    import junit.framework.TestCase;
    
    import org.springframework.beans.factory.BeanFactory;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.wangcf.UserManager;
    
    public class UserManagerTest extends TestCase{
        
        public void testAddUser(){
            BeanFactory factory=new ClassPathXmlApplicationContext("applicationContext.xml");
            UserManager userManager=(UserManager) factory.getBean("userManager");
            System.out.println("------------");
            userManager.addUser();
        }
    }

     打印

     总结:


    UserManager类和HelloWorld类的属性都是通过依赖注入的。

    对象的实例化是依赖注入的,就不用每次new 一个?

  • 相关阅读:
    vue-router重写push方法,解决相同路径跳转报错
    Vue中的权限管理怎么做
    linux启动过程中建立临时页表
    用redis当作LRU缓存
    用IPV6隧道连接IPV4孤岛
    redis协议规范
    nginx的脚本引擎(二)rewrite
    nginx的脚本引擎(一)
    nginx的变量系统
    Singleton
  • 原文地址:https://www.cnblogs.com/-beauTiFul/p/6287042.html
Copyright © 2011-2022 走看看