[Spring]配置简单Bean详解

来源:互联网 发布:大数据开发面试题 编辑:程序博客网 时间:2024/05/01 23:46

IOC&DI即控制反转与依赖注入。是Spring的一大特性。

BeanFactory为Spring实现IOC的接口,可以将BeanFactory看作IOC容器。由于BeanFactory有相关缺陷,衍生出更强大的子接口,ApplicationContext为BeanFactory子接口。

下面对IOC的使用进行详解
首先为Bean

public class User {    private String name;    private int age;    public User() {        super();    }    public User(int age) {        super();        this.age = age;    }    public User(String name) {        super();        this.name = name;    }    public User(String name, int age) {        super();        this.name = name;        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    @Override    public String toString() {        return "User [name=" + name + ", age=" + age + "]";    }}
public class Student {    private String id;    private User user;    public Student() {        super();    }    public Student(String id, User user) {        super();        this.id = id;        this.user = user;    }    public String getId() {        return id;    }    public void setId(String id) {        this.id = id;    }    public User getUser() {        return user;    }    public void setUser(User user) {        this.user = user;    }    @Override    public String toString() {        return "Student [id=" + id + ", user=" + user + "]";    }}

然后创建applicationContext.xml对Bean进行配置

一个<bean>标签意味着要向IOC容器中注入一个类。注入主要分为两种方式: - 构造器注入 - set方法注入

例1

    <!-- property:指定属性名进行set注入 -->    <bean id="user" class="spring.bean.User">        <property name="name" value="konaji"></property>        <property name="age" value="30"></property>    </bean>    public static void test1 (){        /**         * ApplicationContext : Spring的IOC容器         * ClassPathXmlApplicationContext为IOC的实现类之一,读取的XML配置的Bean         */        ApplicationContext context =                 new ClassPathXmlApplicationContext("applicationContext.xml");        User user = (User) context.getBean("user");        //User [name=konaji, age=30]    }

例2

    <!-- constructor-arg:根据构造进行注入 -->    <bean id="user1" class="spring.bean.User">        <constructor-arg value="konaji"></constructor-arg>    </bean>    public static void test2 (){        ApplicationContext context =                 new ClassPathXmlApplicationContext("applicationContext.xml");        User user = (User) context.getBean("user1");        //User [name=konaji, age=0]    }

例3

    <!--         constructor-arg:type:指定构造的类型        应用场景:构造方法(String s1,String s2,int i)        不指定type,会分别将konaji,20赋值给s1,s2        指定type,会分别将konaji,20赋值给s1,i    -->    <bean id="user2" class="spring.bean.User">        <constructor-arg value="konaji" type="java.lang.String"></constructor-arg>        <constructor-arg value="20" type="int"></constructor-arg>    </bean>    public static void test3 (){        ApplicationContext context =                 new ClassPathXmlApplicationContext("applicationContext.xml");        User user = (User) context.getBean("user2");        //User [name=konaji, age=20]    }

例4

    <!--         constructor-arg:index:指定构造方法中属性的位置        应用场景:构造方法(String s1,String s2,int i)        不指定index,会分别将konaji,20赋值给s1,s2        指定index,会分别将konaji,20赋值给s1,i    -->    <bean id="user3" class="spring.bean.User">        <constructor-arg value="konaji" index="0"></constructor-arg>        <constructor-arg value="20" index="1"></constructor-arg>    </bean>    public static void test4 (){        ApplicationContext context =                 new ClassPathXmlApplicationContext("applicationContext.xml");        User user = (User) context.getBean("user3");        //User [name=konaji, age=20]    }

例5

    <!-- 当类属性为另一个类时,可以使用ref,指向XML中配置的类ID进行注入 -->    <bean id="student" class="spring.bean.Student">        <property name="id" value="10000"></property>        <!-- user3指向前面配置的id为user3的bean -->        <property name="User" ref="user3"></property>    </bean>    public static void test5 (){        ApplicationContext context =                 new ClassPathXmlApplicationContext("applicationContext.xml");        Student student = (Student) context.getBean("student");        //Student [id=10000, user=User [name=konaji, age=20]]    }

例6

    <!-- 当类属性为另一个类时,可以使用ref,指向XML中配置的类ID进行注入 -->    <bean id="student1" class="spring.bean.Student">        <constructor-arg value="10000"></constructor-arg>        <!-- user3指向前面配置的id为user3的bean -->        <constructor-arg ref="user3"></constructor-arg>    </bean>    public static void test6 (){        ApplicationContext context =                 new ClassPathXmlApplicationContext("applicationContext.xml");        Student student = (Student) context.getBean("student1");        //Student [id=10000, user=User [name=konaji, age=20]]    }
1 0