`IOC`操作Bean管理基于`xml`方式

IOC操作Bean管理xml方式

第一种注入方式:基于xml方式创建对象Setter方法

知识储备:

1.在Spring配置文件中,使用`Bean`标签,标签里面添加对应属性,可以实现对象创建,在底层使用`xml`读取解析,和反射,工厂模式

2.在`Bean`中创建对象使用标签
		id属性:唯一标识 
		class属性:类全路径
3.`Bean`子标签:
		property属性:类中对应属性
		value属性;给属性的赋值

4.`IOC`创建对象时,默认使用无参构造方法完成对象创建,此时就需要提供`Setter`方法
		注意是:如果没有无参构造方法,并且也不在`Bean`配置文件中指定使用有参构造器,则会报以下错误:
		`NoSuchMethodException`

Setter方法注入

1.创建类
1.定义类
2.定义属性
3.提供对应的setter方法

2.创建Spring配置文件【就是 bean.xml文件】
1.使用bean标签创建对象
2.在bean标签中注入属性

`

定义类

package com.haikang.spring.di.pojo;

/**
 * @Author 海康
 * @Version 1.0
 */
public class User {
    private Integer id;
    private String name;

    public User() {
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }

    public void setName(String name) {
        this.name = name;
    }
}

创建Bean文件

<!--使用Set方式完成对象注入和普通赋值-->
    <bean id="user" class="com.haikang.spring.di.pojo.User">
        <!--
           使用property属性完成属性注入
           name: 类里面属性名称
           value: 向属性注入的值
       -->
        <property name="name" value="海康"/>
        <property name="id" value="101"/>
    </bean>

test

@Test
    public void testSetterDi(){
        ApplicationContext context =
                new ClassPathXmlApplicationContext("Bean1.xml");
        User user = context.getBean("user", User.class);
        System.out.println(user);
        // 返回值是:User{id=101, name='海康'}
    }

第二种注入方式:使用有参构造器方法注入

1.创建类【有三小步】

  1. 定义类
  2. 定义属性
  3. 提供对应的有参构造器方法

2.创建Spring配置文件

  1. 使用bean标签创建对象
  2. bean标签中注入属性

定义类

package com.haikang.spring.di.pojo;

/**
 * @Author 海康
 * @Version 1.0
 */
public class User {
    private Integer id;
    private String name;

    public User(Integer id, String name) {
        this.id = id;
        this.name = name;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }

    public void setName(String name) {
        this.name = name;
    }
}

创建xml文件

<!--使用有参构造器方式完成对象注入和普通赋值-->
    <bean id="user" class="com.haikang.spring.di.pojo.User">
        <constructor-arg name="name" value="海康"/>
        <constructor-arg name="id" value="102"/>
    </bean>

test

@Test
    public void testSetterDi(){
        ApplicationContext context =
                new ClassPathXmlApplicationContext("Bean1.xml");
        User user = context.getBean("user", User.class);
        System.out.println(user);
        // 返回值是:User{id=101, name='海康'}
    }

P名称空间注入【了解】

使用P名称空间注入,可以简化基于xml配置setter方式注入【注意是:是对setter方式进行简化,不能对有参构造器方式简化】

使用步骤
第一步:添加p名称空间在配置文件中

xmlns:p="http://www.springframework.org/schema/p"

上面的那行代码可以复制这行进行修改,将最的beans修改为p,并添加一个前缀`p`
xmlns="http://www.springframework.org/schema/beans"

<beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:p="http://www.springframework.org/schema/p"
       </beans>

第二步:进行属性注入,在Bean标签里面进行操作

 <!--使用P命名空间-->
    <bean id="user" class="com.haikang.spring.di.pojo.User" p:id="103" p:name="复兴" />

案例:
定义类

package com.haikang.spring.di.pojo;

/**
 * @Author 海康
 * @Version 1.0
 */
public class User {
    private Integer id;
    private String name;

    public User(Integer id, String name) {
        this.id = id;
        this.name = name;
    }

    public User() {
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }

    public void setName(String name) {
        this.name = name;
    }
}

xml

xmlns:p="http://www.springframework.org/schema/p"

<!--P名称空间,前提是引入 P 命名空间,也就是上面的那行代码-->
    <bean id="book" class="com.haikang.pojo.Book" p:bname="复兴路" p:bauthor="海康"/>

test

 @Test
    public  void testBook(){
        ApplicationContext context = new 
            ClassPathXmlApplicationContext("appliactionContest.xml");
        Book book = context.getBean("book", Book.class);
        System.out.println(book);
        book.show();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值