加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 程序设计 > 正文

IOC(依赖注入)具体实现

发布时间:2020-05-23 12:10:51 所属栏目:程序设计 来源:互联网
导读:From http://easy115.com/2012/01/05/spring%E7%94%A8%E6%B3%95%E5%B0%8F%E7%BB%93-ioc%E4%BB%A5%E6%9D%A5%E6%B3%A8%E5%85%A5%E5%85%B7%E4%BD%93%E6%97%B6%E9%97%B4.html 大致分为3种注入方式: 1.构造器注入 要求:(1)bean必须提供附带属性的构造

From http://easy115.com/2012/01/05/spring%E7%94%A8%E6%B3%95%E5%B0%8F%E7%BB%93-ioc%E4%BB%A5%E6%9D%A5%E6%B3%A8%E5%85%A5%E5%85%B7%E4%BD%93%E6%97%B6%E9%97%B4.html


大致分为3种注入方式:
1.构造器注入
要求:(1)bean必须提供附带属性的构造方法
(2)配置文件中构造方法标签名constructor-arg ,属性名index="0",0代表构造方法中的第一个参数,例如:

<constructor-arg index="0">
<value>Janet</value>
</constructor-arg>

2.setter方法注入
要求:(1)bean必须提供无参构造方法
(2)要赋值的属性必须提供setter方法
(3)配置文件配置方式,如:

<property name="password">
<value>12345678</value>
</property>

3.特殊注入
要求:(1)如果bean中有List,Map,Set,Properties属性,配置文件中赋值方式分别如下:
<1>List和数组

<property name="hobbyList">
<list>
<value>篮球</value>
<value>发财</value>
<value>泡MM</value>
</list>
</property>

<2>Map

<map>
<entry key="Eric">
<value>80</value>
</entry>
<entry key="Janet">
<value>60</value>
</entry>
<entry key="Jason">
<value>100</value>
</entry>
</map>

<3>Properties

<property name="attributeList">
            <props>
                <prop key="name">Jason</prop>
                <prop key="hobby">足球</prop>
            </props>
</property>

<4>Set

<property name="nameList">
            <set>
                <value>Eric</value>
                <value>Janet</value>
                <value>Coco</value>
            </set>
</property>

(2)如果bean中的属性是另外一个bean的对象那么用ref 属性指向那个bean对象的id属性,例如:

<ref bean="date"/>

1、构造器注入
Bean:

public class User {
    private String userName;
    private String password;

    public User( String userName,String password ) {
        this.userName = userName;
        this.password = password;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
    <bean id="userBean" class="ioc.constructor_injection.beans.User">
        <constructor-arg index="0">
            <value>Janet</value>
        </constructor-arg>
        <constructor-arg index="1">
            <value>88888888</value>
        </constructor-arg>
    </bean>
</beans>

具体应用:

public static void main(String[] args) {
        ApplicationContext ac = new ClassPathXmlApplicationContext(
                "./src/ioc/constructor_injection/config/config.xml");
        // 取得一个实例
        User user = (User) ac.getBean("userBean");
        System.out.println( user.getUserName() + " - " + user.getPassword() );
    }

2、setter方法注入
(注意,使用setter方式依赖注入,bean必须提供系统默认无参构造器)
Bean:

public class User {
    private String userName;

    private String password;

    public User() {

    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
    <bean id="userBean" class="ioc.setter_injection.beans.User">
        <property name="userName">
            <value>Eric</value>
        </property>
        <property name="password">
            <value>12345678</value>
        </property>
    </bean>
</beans>

具体应用:

public static void main(String[] args) {
        ApplicationContext ac = new FileSystemXmlApplicationContext(
                "./src/ioc/setter_injection/config/config.xml");
        User user = (User) ac.getBean("userBean");
        System.out.println( user.getUserName() + " - " + user.getPassword() );
    }

3、List注入
Bean:

public class User {
    private List hobbyList = new Vector();

    public List getHobbyList() {
        return hobbyList;
    }

    public void setHobbyList(List hobbyList) {
        this.hobbyList = hobbyList;
    }
}

配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
    <bean id="userBean" class="ioc.collection_injection.list_injection.beans.User">
        <property name="hobbyList">
            <list>
                <value>篮球</value>
                <value>发财</value>
                <value>泡MM</value>
            </list>
        </property>
    </bean>
</beans>

具体应用:

public static void main(String[] args) {
        ApplicationContext ac = new FileSystemXmlApplicationContext(
    "./src/ioc/collection_injection/list_injection/config/config.xml");
        // 取得一个实例
        User user = (User) ac.getBean("userBean");
        List < String > hobbyList = user.getHobbyList();
        for ( String hobby: hobbyList ) {
            System.out.println( hobby );
        }
    }

4、Map注入
Bean:

public class User {
    private Map nameList = new HashMap();

    public Map getNameList() {
        return nameList;
    }

    public void setNameList(Map nameList) {
        this.nameList = nameList;
    }
}

配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
    <bean id="userBean" class="ioc.collection_injection.map_injection.beans.User">
        <property name="nameList">
            <map>
                <entry key="Eric">
                    <value>80</value>
                </entry>
                <entry key="Janet">
                    <value>60</value>
                </entry>
<entry key="Jason">
                    <value>100</value>
                </entry>
            </map>
        </property>
    </bean>
</beans>

具体应用:

public static void main(String[] args) {
        ApplicationContext ac = new FileSystemXmlApplicationContext(        "./src/ioc/collection_injection/map_injection/config/config.xml");
        // 取得一个实例
        User user = (User) ac.getBean("userBean");
        Map map = user.getNameList();
        Object [] list = map.keySet().toArray();
        for ( Object key: list ) {
            String name = ( String )key;
            String age = ( String )map.get( name );
            System.out.println( name + " - " + age );
        }
    }

5、Properties注入
Bean:

public class User {
    private Properties attributeList = new Properties();

    public Properties getAttributeList() {
        return attributeList;
    }

    public void setAttributeList(Properties attributeList) {
        this.attributeList = attributeList;
    }
}

配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
    <bean id="userBean"
        class="ioc.collection_injection.properties_injection.beans.User">
        <property name="attributeList">
            <props>
                <prop key="name">Jason</prop>
                <prop key="hobby">足球</prop>
            </props>
        </property>
    </bean>
</beans>

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读