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 一个?

  • 相关阅读:
    Yield Usage Understanding
    Deadclock on calling async methond
    How to generate file name according to datetime in bat command
    Run Unit API Testing Which Was Distributed To Multiple Test Agents
    druid的关键参数+数据库连接池运行原理
    修改idea打开新窗口的默认配置
    spring boot -thymeleaf-url
    @pathvariable和@RequestParam的区别
    spring boot -thymeleaf-域对象操作
    spring boot -thymeleaf-遍历list和map
  • 原文地址:https://www.cnblogs.com/-beauTiFul/p/6287042.html
Copyright © 2011-2022 走看看