[3]Spring以配置文件的方式进行属性注入

来源:互联网 发布:数据挖掘是什么 编辑:程序博客网 时间:2024/05/19 14:17

在Java中进行属性注入的三种方式(也就是给属性赋值的几种方式)

1.使用set方法注入属性

    public class User{        private String name;        public void setName(String name){          this.name = name;        }    }    User user = new User();    user.setName("wangke");

2.有参构造注入属性

public class User{  private String name;  public User(String name){      this.name = name;  }}User user = new User("wangke")

3.使用接口的方式进行属性的注入

  public interface UserDao{    void setName(String name);  }  public class UserImpl UserDao implement UserDao{    private String name;    void setName(Strin name){      this.name = name;    }  }UserImpl user =  new UserImpl();user.setName("wangke");

但是在spring框架中只支持前两种的属性注入的方式:

1. set方法注入(使用比较多)

2.带参的构造方法的注入

1. 使用有参数构造的注入:

User.java(需要进行装配的User类)

/** * Created by wangke on 17-6-22. */public class User {    private String userName;    private String age;    public User(String userName,int age) {        this.userName = userName;        this.age = age;    }    public void print(){        System.out.println("userName==>"+userName+"age==>"+age);    }}

applicationContext.xml(spring配置文件)

<bean id="user" class="com.merpyzf.study01.User"><constructor-arg name="userName" value="wangke"></constructor-arg><constructor-arg name="age" value="20"></constructor-arg></bean>

当类的构造方法有多个参数时,我们可以通过在 constructor-arg 标签中指定要进行注入值的属性的 name 来确定 value 的对应关系。

也可以使用index属性来指定值所要注入的属性的位置,此时可以省略name属性
如下示例:

<constructor-arg  value="wangke" index="0"></constructor-arg><constructor-arg  value="20" index="1"></constructor-arg>

myTest.java(测试代码)

@Testpublic void Test(){   ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");   User user = (User) context.getBean("user");   user.print();}

运行效果:

这里写图片描述

2. 使用Set的方式进行属性的注入

User.java(需要进行属性注入的对象)

/** * Created by wangke on 17-6-22. */public class User {    private String userName;    private int age;    public void setUserName(String userName) {        this.userName = userName;    }    public void setAge(int age) {        this.age = age;    }    public void print(){        System.out.println("userName==>"+userName+"age==>"+age);    }}

使用set方式进行对属性进行输入时,需要注入的属性必须要有setter方法

applicationContext.xml(spring配置文件)

<bean id="user" class="com.merpyzf.study01.User">        <!--name 属性值 : 对应类里面定义的属性名称  value : 需要给属性设置的值-->        <property name="age" value="20"></property>        <property name="userName" value="wangke"></property>    </bean>

当进行set方式进行属性注入的时候需要使用 property 属性来完成注入

myTest.java(测试代码)

@Testpublic void Test(){   ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");   User user = (User) context.getBean("user");   user.print();}

运行效果:

这里写图片描述

3. 注入复杂的数据类型(list、array、map)

这里注入复杂数据类型使用set的方式进行

User.java(需要进行属性注入的类)

public class User {    private String userName;    private List<String> books;    private String []girlFriends;    private Map<String,String> mMap;    public void setUserName(String userName) {        this.userName = userName;    }    public void setBooks(List<String> books) {        this.books = books;    }    public void setGirlFriends(String[] girlFriends) {        this.girlFriends = girlFriends;    }    public void setmMap(Map<String, String> mMap) {        this.mMap = mMap;    }    @Override    public String toString() {        return "User{" +                "userName='" + userName + '\'' +                ", books=" + books +                ", girlFriends=" + Arrays.toString(girlFriends) +                ", mMap=" + mMap +                '}';    }}

applicationContext.xml(spring配置文件)

    <bean id="user" class="com.merpyzf.study01.User">        <property name="userName" value="wangke"></property>        <property name="books" >            <!--配置list-->            <array>                <value type="java.lang.String"> 冰与火之歌 </value>                <value type="java.lang.String"> 活着 </value>                <value type="java.lang.String"> 一句顶一万句 </value>            </array>        </property>        <property name="girlFriends">            <!--配置数组-->            <array>                <value>小莉</value>                <value>凤姐</value>            </array>        </property>        <property name="mMap">            <!--配置map集合-->            <map>                <entry key="aa -key" value="bb -value"></entry>                <entry key="dd -key" value="ee - value"></entry>            </map>        </property>    </bean>

MyTest.java(测试代码)

@Test public void Test(){     ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");     User user = (User) context.getBean("user");     System.out.println(user); }

运行效果:

这里写图片描述

4. 使用set方式给属性注入对象类型

在开发中我们经常会遇到在一个类中持有另外一个类的引用,下面来看一下如何让使用set的方法来给属性注入对象类型。

UserService.java(UserService类中持有UserDao对象)

/** * Created by wangke on 17-6-22. */public class UserService {    private UserDao mUserDao;    //在配置文件中通过set方式给mUserDao属性注入对象类型属性    public void setmUserDao(UserDao mUserDao) {        this.mUserDao = mUserDao;    }    public void print(){        //调用UserDao中的方法        mUserDao.printInfo();    }}

UserDao.java

/** * Created by wangke on 17-6-22. */public class UserDao {    //只有一个方法用来测试对象创建是否成功    public void printInfo() {        System.out.println("UserDao ^-^");    }}

applicationCOntext.xml(spring配置文件)

<!--首先创建UserDao对象--><bean id="userDao" class="com.merpyzf.study01.UserDao"></bean><bean id="userService" class="com.merpyzf.study01.UserService">  <!--通过ref属性注入对象类型 ref中的内容为对象的id值-->  <property name="mUserDao" ref="userDao"></property></bean>

运行结果:

这里写图片描述