zoukankan      html  css  js  c++  java
  • java:Spring框架1(基本配置,简单基础代码模拟实现,spring注入(DI))

    1.基本配置:

      

      

      

      步骤一:新建项目并添加spring依赖的jar文件和commons-logging.xx.jar:

     

      步骤二:编写实体类,DAO及其实现类,Service及其实现类;

      步骤三:在src下新建配置文件applicationContext.xml,并配置bean节点和property:

    <?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:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd">
            
        <bean id="userinfoJdbcDao" class="cn.zzsxt.dao.impl.UserinfoJdbcDaoImpl"></bean>    
        <bean id="userinfoHibDao" class="cn.zzsxt.dao.impl.UserinfoHibDaoImpl"></bean>    
        <bean id="userinfoService" class="cn.zzsxt.service.impl.UserinfoServiceImpl">
            <property name="userinfoDao" ref="userinfoHibDao"></property>
        </bean>
    </beans>        

      

      bean节点:

        id属性:用户自定义的bean的名称,使用ApplicationContext中getBean()根据此id的值从spring容器中获取已创建好的对象。

        class属性:全限定的类名,spring容器会根据此类名动态创建对象

      property节点:

        name属性:必须与bean中待注入的属性名称一致,回调其对应的setter方法为该属性赋值。

        ref属性:必须与待注入的对象的id一致,从spring容器中根据ref获取待注入的对象,然后回调setter方法将该对象赋值给属性。

      

      

      步骤四:测试:

    public class Test {
        public static void main(String[] args) {
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
            UserinfoService userinfoService = applicationContext.getBean(UserinfoService.class,"userinfoService");
            Userinfo user = new Userinfo();
            user.setUserId(1);
            user.setUserName("test");
            user.setUserPass("test");
            userinfoService.save(user);
        }
    }

    2.简单基础代码模拟实现:

      

      application.xml:

      

    <?xml version="1.0" encoding="UTF-8"?>
    <beans>
        <!-- UserinfoJdbcDaoImpl userinfoJdbcDao = new  UserinfoJdbcDaoImpl()-->
        <bean id="userinfoJdbcDao" class="cn.zzsxt.dao.impl.UserinfoJdbcDaoImpl"></bean>
        <!--UserinfoHibDaoImpl  userinfoHibDao = new  UserinfoHibDaoImpl()-->
        <bean id="userinfoHibDao" class="cn.zzsxt.dao.impl.UserinfoHibDaoImpl"></bean>
        <!--UserinfoServiceImpl userinfoService = new UserinfoServiceImpl()  -->
        <bean id="userinfoService" class="cn.zzsxt.service.impl.UserinfoServiceImpl">
            <!--userinfoService.setUserinfoDao(userinfoJdbcDao);  -->
            <property name="userinfoDao"  ref="userinfoJdbcDao"></property>
        </bean>
    </beans>

      

      UserinfoHibDaoImpl:

    package cn.zzsxt.dao.impl;
    
    import cn.zzsxt.dao.UserinfoDao;
    import cn.zzsxt.entity.Userinfo;
    
    public class UserinfoHibDaoImpl implements UserinfoDao {
    
        @Override
        public void save(Userinfo user) {
            System.out.println("利用hibernate执行了新增,新增用户"+user);
        }
    
    }

      UserinfoJdbcDaoImpl:

    package cn.zzsxt.dao.impl;
    
    import cn.zzsxt.dao.UserinfoDao;
    import cn.zzsxt.entity.Userinfo;
    
    public class UserinfoJdbcDaoImpl implements UserinfoDao {
    
        @Override
        public void save(Userinfo user) {
            System.out.println("利用jdbc执行了新增,新增用户"+user);
        }
    
    }

      BeanDefination:

    package cn.zzsxt.framework;
    
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * 封装配置文件applicationContext.xml中bean节点的信息
     *     <bean id="userinfoService" class="cn.zzsxt.service.impl.UserinfoServiceImpl">
     *        <property name="userinfoDao"  ref="userinfoHibDao"></property>
     *    </bean>
     * @author Think
     *
     */
    public class BeanDefination {
        private String beanId;//封装id属性的值
        private String beanClass;//封装class属性的值
        //封装该bean节点的所有property子节点的信息,利用property的name做键,利用property的信息做值
        private Map<String,PropertyDefination> propsMap = new HashMap<String,PropertyDefination>();
        
        public String getBeanId() {
            return beanId;
        }
        public void setBeanId(String beanId) {
            this.beanId = beanId;
        }
        public String getBeanClass() {
            return beanClass;
        }
        public void setBeanClass(String beanClass) {
            this.beanClass = beanClass;
        }
        public Map<String, PropertyDefination> getPropsMap() {
            return propsMap;
        }
        public void setPropsMap(Map<String, PropertyDefination> propsMap) {
            this.propsMap = propsMap;
        }
        @Override
        public String toString() {
            return "BeanDefination [beanId=" + beanId + ", beanClass=" + beanClass + ", propsMap=" + propsMap + "]";
        }
        
    }

      PropertyDefination:

    package cn.zzsxt.framework;
    /**
     * 封装applicationContext.xml中property节点的信息
     * <property name="userinfoDao"  ref="userinfoHibDao"></property>
     * @author Think
     *
     */
    public class PropertyDefination {
        private String propertyName;//封装name属性的值
        private String propertyRef;//封装ref属性的值
        public String getPropertyName() {
            return propertyName;
        }
        public void setPropertyName(String propertyName) {
            this.propertyName = propertyName;
        }
        public String getPropertyRef() {
            return propertyRef;
        }
        public void setPropertyRef(String propertyRef) {
            this.propertyRef = propertyRef;
        }
        @Override
        public String toString() {
            return "PropertyDefination [propertyName=" + propertyName + ", propertyRef=" + propertyRef + "]";
        }
        
    }

      UserinfoServiceImpl:

    package cn.zzsxt.service.impl;
    
    import cn.zzsxt.dao.UserinfoDao;
    import cn.zzsxt.entity.Userinfo;
    import cn.zzsxt.service.UserinfoService;
    
    public class UserinfoServiceImpl implements UserinfoService {
        private UserinfoDao userinfoDao;
        
        public void setUserinfoDao(UserinfoDao userinfoDao) {
            this.userinfoDao = userinfoDao;
        }
    
        @Override
        public void save(Userinfo user) {
            userinfoDao.save(user);
        }
        
    }

      SxtApplicationContext:

    package cn.zzsxt.framework;
    
    import java.io.InputStream;
    import java.lang.reflect.Method;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Map.Entry;
    
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    
    import cn.zzsxt.entity.Userinfo;
    import cn.zzsxt.service.UserinfoService;
    
    public class SxtApplicationContext {
        //封装所有bean节点的信息,利用bean的id做键,利用bean节点的信息做值
        private Map<String,BeanDefination> beanDefinationsMap = new HashMap<String,BeanDefination>();
        //封装所有动态创建的对象信息,利用bean的id做键,利用创建的对象做值
        private Map<String,Object>  beansMap = new HashMap<String,Object>();
        
        public SxtApplicationContext(){
            parseXML();//解析配置文件
            createObject();//动态创建对象
            injectObject();//为属性注入值:回调该属性的setter方法
        }
        /**
         * 解析applicationContext.xml配置文件信息。
         * 将bean节点封装成BeanDefination对象
         * 将property节点封装成PropertyDefination对象
         * 
         */
        public void parseXML(){ 
            InputStream ips = this.getClass().getResourceAsStream("/applicationContext.xml");
            SAXReader saxReader = new SAXReader();
            try {
                Document document = saxReader.read(ips);
                //获取根节点
                Element beans = document.getRootElement();//获取根节点-->beans节点
                Iterator<Element> beanIter = beans.elementIterator();
                while(beanIter.hasNext()){
                    Element bean = beanIter.next();//获取bean节点
                    String beanId = bean.attributeValue("id");//获取bean节点的id属性值
                    String beanClass = bean.attributeValue("class");//获取bean节点的class属性值
                    //将bean节点的信息封装成BeanDefination对象
                    BeanDefination beanDefination = new BeanDefination();
                    beanDefination.setBeanId(beanId);
                    beanDefination.setBeanClass(beanClass);
                    Iterator<Element> propertyIter = bean.elementIterator();
                    while(propertyIter.hasNext()){
                        Element property = propertyIter.next();//获取property节点
                        String propertyName =  property.attributeValue("name");//获取property节点的name属性值
                        String propertyRef =  property.attributeValue("ref");//获取property节点的ref属性值
                        //将property节点的信息封装成PropertyDefination对象
                        PropertyDefination propertyDefination = new PropertyDefination();
                        propertyDefination.setPropertyName(propertyName);
                        propertyDefination.setPropertyRef(propertyRef);
                        //将property节点的信息添加到beanDefination的map中
                        beanDefination.getPropsMap().put(propertyName, propertyDefination);
                    }
                    //将beanDefination添加到beanDefinationsMap中
                    beanDefinationsMap.put(beanId, beanDefination);
                }
            } catch (DocumentException e) {
                e.printStackTrace();
            }
        }
        
        /**
         * 根据配置文件中bean节点的class属性信息动态创建对象,并将创建的对象添加到beansMap中
         */
        public void createObject(){
            try {
                //1.遍历beanDefinationsMap(封装了所有bean节点的信息)
                for (Entry<String,BeanDefination> beanEntry :beanDefinationsMap.entrySet()) {
                    String beanId = beanEntry.getKey();//bean的id属性的值
                    BeanDefination beanDefination = beanEntry.getValue();//获取bean节点的信息
                    String beanClass = beanDefination.getBeanClass();//bean的class属性的值
                    Object object = Class.forName(beanClass).newInstance();//根据bean节点的class属性值(全限定的类名)动态创建对象
                    //将创建的对象添加到beansMap中,利用beanId做键,利用对象做值
                    beansMap.put(beanId, object);
                }
            } catch (Exception e) {
                e.printStackTrace();
            } 
        }
        
        /**
         * 根据property节点所配置的属性信息,从容器中查找待注入的对象,回调setter方法为属性赋值。
         */
        public void injectObject(){
            try {
                for (Entry<String,BeanDefination> beanEntry :beanDefinationsMap.entrySet()) {
                    String beanId = beanEntry.getKey();//bean的id属性的值
                    //根据beanId从beansMap中创建的对象
                    Object target=getBean(beanId);
                    
                    BeanDefination beanDefination = beanEntry.getValue();//获取bean节点的信息
                    String beanClass = beanDefination.getBeanClass();//bean的class属性的值
                    Class clazz = Class.forName(beanClass);//动态加载bean
                    Map<String,PropertyDefination> propsMap = beanDefination.getPropsMap();//获取property节点的信息
                    for (Entry<String,PropertyDefination> propertyEntry : propsMap.entrySet()) {
                        PropertyDefination propertyDefination = propertyEntry.getValue();//获取property节点的信息
                        String propertyName = propertyDefination.getPropertyName();//获取property的name属性值                    
                        String propertyRef = propertyDefination.getPropertyRef();//获取property的ref属性值
                        
                        Object params = getBean(propertyRef);//根据property中的ref属性值从beansMap获取待注入的对象(要求ref属性的值必须与待注入的bean的id值一致)
                        
                        String setterMethodName = makeSetter(propertyName);//根据property节点的name属性值,获取其对应的setter方法名
                        
                        Method[] ms = clazz.getDeclaredMethods();
                        for (Method method : ms) {
                            String methodName = method.getName();
                            if(methodName.equals(setterMethodName)){
                                //回调setter方法
                                method.invoke(target, params);
                                
                            }
                        }
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        
        
        
        /**
         * 根据beanId从beansMap容器中获取创建的对象
         * @param beanId
         * @return
         */
        public Object getBean(String beanId){
            return beansMap.get(beanId);
        }
        /**
         * 根据属性名称生成对应的setter方法名: set+属性的首字母大写+其余字母
         * @param fieldName
         * @return
         */
        public String makeSetter(String fieldName){
            return "set"+fieldName.substring(0,1).toUpperCase()+fieldName.substring(1);
        }
        
        public static void main(String[] args) {
            SxtApplicationContext applicationContext = new SxtApplicationContext();
            UserinfoService userinfoService = (UserinfoService)applicationContext.getBean("userinfoService");
            Userinfo user = new Userinfo();
            user.setUserId(1);
            user.setUserName("admin");
            user.setUserPass("admin");
            userinfoService.save(user);
        }
    }

    3.spring注入(DI):

      application.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"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd">
            
        <bean id="userinfoJdbcDao" class="cn.zzsxt.dao.impl.UserinfoJdbcDaoImpl"></bean>    
        <bean id="userinfoHibDao" class="cn.zzsxt.dao.impl.UserinfoHibDaoImpl"></bean>    
        <bean id="userinfoService" class="cn.zzsxt.service.impl.UserinfoServiceImpl">
            <property name="userinfoDao" ref="userinfoHibDao"></property>
        </bean>
    </beans>        

      beans.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"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd">
        <!--
            DI:依赖注入
            1.setter注入:回调属性的setter方法为该属性赋值
                a.为属性注入常量值:使用property的value属性
                b.为属性注入对象:使用property的ref属性
            2.构造方法注入(构造子注入):回调构造方法为属性赋值
         -->    
        <bean id="user" class="cn.zzsxt.entity.Userinfo">
            <property name="userId" value="1"></property>
            <property name="userName" value="zhangsan"></property>
            <property name="userPass" value="123"></property>
        </bean>
        <!-- 
            构造方法注入:constructor-arg index代表的参数的下标 
            a.为属性注入常量值:使用constructor-arg中的value属性
            b.为属性注入对象: 使用constructor-arg中的ref属性
         -->
        <bean id="user2" class="cn.zzsxt.entity.Userinfo2">
            <constructor-arg index="0" value="2"></constructor-arg>
            <constructor-arg index="1" value="lisi"></constructor-arg>
            <constructor-arg index="2" value="1234"></constructor-arg>
        </bean>
        
        <bean id="userinfoJdbcDao" class="cn.zzsxt.dao.impl.UserinfoJdbcDaoImpl"></bean>
        <bean id="userinfoService" class="cn.zzsxt.service.impl.UserinfoServiceImpl">
            <!-- 使用setter注入 -->
    <!--         <property name="userinfoDao" ref="userinfoJdbcDao"></property> -->
            <!-- 使用构造函数为属性注入对象 -->
            <constructor-arg index="0" ref="userinfoJdbcDao"></constructor-arg>
        </bean>
    </beans>        


      beans2.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"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd">
       <!-- 为集合属性注入值:在框架的集成中较为常见 -->
       <bean id="myCollection" class="cn.zzsxt.entity.MyCollection">
               <!-- 为list类型的属性注入值 -->
               <property name="list">
                   <list>
                       <value>list1</value>
                       <value>list2</value>
                       <value>list3</value>
                   </list>
               </property>
               <!-- 为set类型的属性注入值 -->
               <property name="set">
                   <set>
                       <value>set1</value>
                       <value>set2</value>
                       <value>set1</value>
                   </set>
               </property>
               <!-- 为map类型的属性注入值 -->
               <property name="map">
                   <map>
                       <entry key="key1" value="value1"></entry>
                       <entry key="key2" value="value2"></entry>
                   </map>
               </property>
               <!-- 为properties类型的属性注入值 -->
               <property name="props">
                   <props>
                       <prop key="p-key1">p-value1</prop>
                       <prop key="p-key2">p-value2</prop>
                   </props>
               </property>
       </bean>
    </beans>        


      beans3.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"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd">
            
          <bean id="stoneAxe" class="cn.zzsxt.ioc.StoneAxe"></bean>
          <bean id="steelAxe" class="cn.zzsxt.ioc.SteelAxe"></bean>
          <bean id="chinese" class="cn.zzsxt.ioc.Chinese">
              <property name="axe" ref="stoneAxe"></property>
          </bean>
          <bean id="american" class="cn.zzsxt.ioc.American">
              <property name="axe" ref="steelAxe"></property>
          </bean>
    </beans>        

      MyCollection:

    package cn.zzsxt.entity;
    
    import java.util.List;
    import java.util.Map;
    import java.util.Properties;
    import java.util.Set;
    
    public class MyCollection {
        private List list;
        private Set set;
        private Map map;
        private Properties props;
        
        public List getList() {
            return list;
        }
    
        public void setList(List list) {
            this.list = list;
        }
    
        public Set getSet() {
            return set;
        }
    
        public void setSet(Set set) {
            this.set = set;
        }
    
        public Map getMap() {
            return map;
        }
    
        public void setMap(Map map) {
            this.map = map;
        }
    
        public Properties getProps() {
            return props;
        }
    
        public void setProps(Properties props) {
            this.props = props;
        }
        
    }

      Userinfo:

    package cn.zzsxt.entity;
    
    public class Userinfo {
        private int userId;
        private String userName;
        private String userPass;
        
        public Userinfo(int userId, String userName, String userPass) {
            this.userId = userId;
            this.userName = userName;
            this.userPass = userPass;
        }
        
        public Userinfo() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        public int getUserId() {
            return userId;
        }
        public void setUserId(int userId) {
            this.userId = userId;
        }
        public String getUserName() {
            return userName;
        }
        public void setUserName(String userName) {
            this.userName = userName;
        }
        public String getUserPass() {
            return userPass;
        }
        public void setUserPass(String userPass) {
            this.userPass = userPass;
        }
        @Override
        public String toString() {
            return "Userinfo [userId=" + userId + ", userName=" + userName + ", userPass=" + userPass + "]";
        }
        
    }

      UserinfoServiceImpl:

    package cn.zzsxt.service.impl;
    
    import cn.zzsxt.dao.UserinfoDao;
    import cn.zzsxt.entity.Userinfo;
    import cn.zzsxt.service.UserinfoService;
    /**
     * 开闭原则:
     * @author Think
     *
     */
    public class UserinfoServiceImpl implements UserinfoService {
    //    private UserinfoDao userinfoDao = new UserinfoHibDaoImpl();
        private UserinfoDao userinfoDao;
        
        public UserinfoServiceImpl() {
        }
    
        public UserinfoServiceImpl(UserinfoDao userinfoDao) {
            System.out.println("带参构造函数被调用了...");
            this.userinfoDao = userinfoDao;
        }
    
        public void setUserinfoDao(UserinfoDao userinfoDao) {
            this.userinfoDao = userinfoDao;
        }
    
        @Override
        public void save(Userinfo user) {
            userinfoDao.save(user);
        }
        
    }

      Test:

    package cn.zzsxt.test;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import cn.zzsxt.entity.Userinfo;
    import cn.zzsxt.service.UserinfoService;
    
    public class Test {
        public static void main(String[] args) {
            ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
            UserinfoService userinfoService = applicationContext.getBean(UserinfoService.class,"userinfoService");
            Userinfo user = new Userinfo();
            user.setUserId(1);
            user.setUserName("test");
            user.setUserPass("test");
            userinfoService.save(user);
        }
    }

      Test2:

    package cn.zzsxt.test;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import cn.zzsxt.entity.Userinfo;
    import cn.zzsxt.entity.Userinfo2;
    import cn.zzsxt.service.UserinfoService;
    
    public class Test2 {
        public static void main(String[] args) {
            ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
            Userinfo user = ac.getBean(Userinfo.class,"user");
            System.out.println(user);
            System.out.println("-------------");
            Userinfo2 user2 = ac.getBean(Userinfo2.class,"user2");
            System.out.println(user2);
            System.out.println("--------------------");
            UserinfoService userinfoService = ac.getBean(UserinfoService.class,"userinfoService");
            userinfoService.save(user);
        }
    }

      Test3:

    package cn.zzsxt.test;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import cn.zzsxt.entity.MyCollection;
    import cn.zzsxt.entity.Userinfo;
    import cn.zzsxt.entity.Userinfo2;
    import cn.zzsxt.service.UserinfoService;
    
    public class Test3 {
        public static void main(String[] args) {
            ApplicationContext ac = new ClassPathXmlApplicationContext("beans2.xml");
            MyCollection myCollection = ac.getBean(MyCollection.class,"myCollection");
            System.out.println(myCollection.getList());
            System.out.println(myCollection.getSet());
            System.out.println(myCollection.getMap());
            System.out.println(myCollection.getProps());
            
        }
    }

       Axe:

    package cn.zzsxt.ioc;
    
    public interface Axe {
        public void chop();
    }

      StoneAxe:

    package cn.zzsxt.ioc;
    
    public class StoneAxe implements Axe {
    
        @Override
        public void chop() {
            System.out.println("我是石斧,砍人很钝!");
        }
    
    }

      SteelAxe:

    package cn.zzsxt.ioc;
    
    public class SteelAxe implements Axe {
    
        @Override
        public void chop() {
            System.out.println("我是鉄斧,砍人很锋利!");
        }
    
    }

      Person:

    package cn.zzsxt.ioc;
    
    public interface Person {
        public void useAxe();
    }

      Chinese:

    package cn.zzsxt.ioc;
    
    public class Chinese implements Person {
        private Axe axe;
        public void setAxe(Axe axe) {
            this.axe = axe;
        }
    
        @Override
        public void useAxe() {
            System.out.println("我是中国人民解放军,现在向你发出严重警告!");
            axe.chop();
        }
    
    }

      American:

    package cn.zzsxt.ioc;
    
    public class American implements Person {
        private Axe axe;
        public void setAxe(Axe axe) {
            this.axe = axe;
        }
    
        @Override
        public void useAxe() {
            System.out.println("我是美国大兵,你瞅啥!");
            axe.chop();
        }
    
    }

      Test:

      

    package cn.zzsxt.ioc;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class Test {
        public static void main(String[] args) {
            ApplicationContext ac = new ClassPathXmlApplicationContext("beans3.xml");
            Person p = (Person)ac.getBean("chinese");
            p.useAxe();
            System.out.println("-----------------");
            Person p2 = (Person)ac.getBean("american");
            p2.useAxe();
            
            
        }
    }

        

  • 相关阅读:
    浮动广告
    jQuery给table添加行和删除行
    oracle优化方式和sql标准
    使用JavaScript中的ActiveXObject填充并设置Excel格
    打印相关的js
    利用js导出Excel
    Oracle左外连接和右外连接的写法
    天气预报抓取的方法和源代码(包括从IP获取)
    algorithm
    ungetc
  • 原文地址:https://www.cnblogs.com/kuangzhisen/p/7413497.html
Copyright © 2011-2022 走看看