[Spring]配置简单Bean详解

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]]
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值