3、IOC容器-Bean管理XML方式

IOC操作Bean管理

1、什么是Bean管理
Bean管理指的是两个操作
Spring创建对象;
Spring注入属性

2、Bean管理操作有两种方式
(1)基于xml配置文件方式实现
(2)基于注解方式实现

IOC操作Bean管理(基于XML方式)

1、基于xml方式创建对象

<bean id="user" class="com.feng.pojo.User"></bean>

(1)在spring配置文件中,使用bean标签,标签添加对应的属性,就可以实现对象的创建
(2)在bean标签中有很多属性,常用的有:

  • id属性:唯一标识*
  • class属性:类全路径(包+类)*

(3)创建对象时,默认执行无参构造方法完成对象创建

2、基于xml方式注入属性

DI依赖注入,就是注入属性(是IOC中一种具体实现,表示依赖注入)

第一种:set方法注入属性
(1)创建类:定义属性,和set方法
(2)在spring的xml配置文件中输入以下代码

<!--使用set方法注入属性-->
<bean id="user" class="com.feng.pojo.User">
	<!--使用property完成属性注入
	name:类中的属性名
	value:属性值
	-->
	<property name="name" value="Tom"></property>
	<property name="sex" value=""></property>
</bean>

第二种:有参构造注入
(1)创建类:定义属性,和全参构造

<!--使用有参构造注入属性-->
<bean id="user" class="com.feng.pojo.User">
	<!--使用constructor-arg完成属性注入
	name:类中的属性名
	value:属性值
	index:索引值(第几个属性名下标)
	-->
	<constructor-arg name="name" value="Tom"></constructor-arg>
	<constructor-arg name="sex" value=""></constructor-arg>
	<!--<constructor-arg index="0" value="Tom"></constructor-arg>
	<constructor-arg index="1" value="男"></constructor-arg>-->
</bean>

p命名空间(property)(第一种:set方法注入属性)和c命名空间(constructor-arg)(第二种:有参构造注入)(了解)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:c="http://www.springframework.org/schema/c"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--
    要添加p、c命名空间在配置文件中
		xmlns:p="http://www.springframework.org/schema/p"
		xmlns:c="http://www.springframework.org/schema/c"
	-->
    <!--p命名空间注入-->
    <bean id="user" class="com.feng.pojo.User" p:name="汤姆" p:age="8" scope="singleton"/>
    <!--c命名空间注入-->
    <bean id="user2" class="com.feng.pojo.User" c:name="杰克" c:age="18" scope="prototype"/>
</beans>

IOC操作Bean管理(XML注入其他类型属性)

1、字面量
(1)null值

<bean id="user" class="com.feng.pojo.User">
	<property name="name" value="Tom"></property>
	<property name="sex" value=""></property>
	<property name="address">
		<null/>
	</property>
</bean>

(2)属性值包含特殊符号

<bean id="user" class="com.feng.pojo.User">
	<property name="name" value="Tom"></property>
	<property name="sex" value=""></property>
	<property name="address">
		<value><![CDATA[<<北京>>]]><value/>
	</property>
</bean>

2、注入属性-外部bean

(1)创建两个类service类和dao类
(2)在service调用dao里面的方法
(3)在spring配置文件中进行配置

public class UserService {
	//创建UserDao类型属性,生成set方法
	private UserDao userDao;
	
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}
	public void add() {
		System.out.println("service add...............");userDao.update();
	}
}
<!--1 service和dao对象创建-->
<bean id="userService" class="com.feng.service.UserService">
	<!--注入userDao对象name属性:
	类里面属性名称ref属性:创建userDao对象bean标签id值-->
	<property name="userDao" ref="userDaoImpl"></property>
</bean>
<bean id="userDaoImpl" class="com.feng.dao.UserDaoImpl"></bean>

3、注入属性-内部bean

(1)一对多关系:部门和员工
(2)部门类

public class Dept {
	private String dname;
	public void setDname(String dname) {
		this.dname = dname;
	}
}

(3)员工类

public class Emp {
	private String ename;
	private String sex;
	//员工属于某一个部门,使用对象形式表示
	private Dept dept;
	public void setDept(Dept dept) {
		this.dept = dept;
	}
	public void setEname(String ename) {
		this.ename = ename;
	}
	public void setSex(String sex) {
		this.sex= sex;
	}
}

(4)在spring配置文件中进行配置

<bean id="emp" class="com.feng.bean.Emp">
	<!--设置两个普通属性-->
	<property name="ename" value="Tom"></property>
	<property name="sex" value=""></property>
	<!--设置对象类型属性-->
	<property name="dept">
		<bean id="dept" class="com.feng.bean.Dept">
			<property name="dname" value="研发部"></property>
		</bean>
	</property>
</bean>

4、注入属性-级联赋值

第一种写法:

<bean id="emp" class="com.feng.bean.Emp">
	<!--设置两个普通属性-->
	<property name="ename" value="Tom"></property>
	<property name="sex" value=""></property>
	<!--级联赋值-->
	<property name="dept" ref="dept"></property>
</bean>
<bean id="dept" class="com.feng.bean.Dept">
	<property name="dname" value="财务部"></property>
</bean>

第二种写法:

<bean id="emp" class="com.feng.bean.Emp">
	<!--设置两个普通属性-->
	<property name="ename" value="Tom"></property>
	<property name="sex" value=""></property>
	<!--级联赋值-->
	<property name="dept" ref="dept"></property><!--这个必须有-->
	<!--要配合get方法使用-->
	<property name="dept.dname" value="研发部"></property>
</bean>
<bean id="dept" class="com.feng.bean.Dept">
	<property name="dname" value="财务部"></property><!--这个可以没有-->
</bean>
public Dept getDept() {
	return dept;
}

5、注入属性-集合
(1)注入数组类型属性
(2)注入List集合类型属性
(3)注入Map集合类型属性
(3)注入Set集合类型属性

public class Stu {
	//数组
    private String[] courses;
	//list集合
    private List<String> list;
	//map集合
    private Map<String,String> map;
	//set集合
    private Set<String> set;

    public void setCourses(String[] courses) {
        this.courses = courses;
    }
    public void setList(List<String> list) {
        this.list = list;
    }
    public void setMap(Map<String, String> map) {
        this.map = map;
    }
    public void setSet(Set<String> set) {
        this.set = set;
    }
    public void test(){
        System.out.println(Arrays.toString(courses));
        System.out.println(list);
        System.out.println(map);
        System.out.println(set);
    }
}
	<bean id="stu" class="com.feng.bean.Stu">
        <property name="courses">
            <array>
                <value>语文</value>
                <value>数学</value>
                <value>英语</value>
            </array>
        </property>
        <property name="list">
            <list>
                <value>小明</value>
                <value>小花</value>
                <value>小张</value>
            </list>
        </property>
        <property name="map">
            <map>
                <entry key="1" value="Java"></entry>
                <entry key="2" value="Python"></entry>
            </map>
        </property>
        <property name="set">
            <set>
                <value>HTML</value>
                <value>JSP</value>
            </set>
        </property>
    </bean>

(5)在集合中设置对象型值

//新建类
public class Course {
    private String cname;

    public void setCname(String cname) {
        this.cname = cname;
    }

    @Override
    public String toString() {
        return "Course{" +
                "cname='" + cname + '\'' +
                '}';
    }
}
//在Stu类中添加
private List<Course> course;

public void setCourse(List<Course> course) {
	this.course = course;
}
	<bean>
		<property name="course">
            <list>
            	<!--引入对象id-->
                <ref bean="course1"></ref>
                <ref bean="course2"></ref>
                <ref bean="course3"></ref>
            </list>
        </property>
    </bean>
    <!--创建多个course对象-->
    <bean id="course1" class="com.feng.bean.Course">
       	<property name="cname" value="Java基础"></property>
    </bean>
    <bean id="course2" class="com.feng.bean.Course">
        <property name="cname" value="Spring框架"></property>
    </bean>
    <bean id="course3" class="com.feng.bean.Course">
        <property name="cname" value="MyBatis框架"></property>
    </bean>

(6)把集合部分提取出来

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
    <!--
    引入util命名空间
    xmlns:util="http://www.springframework.org/schema/util"
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
    -->
    <util:list id="list">
        <value>小明</value>
        <value>小花</value>
        <value>小张</value>
    </util:list>

    <bean id="stu" class="com.feng.bean.Stu">
        <!--把list集合单独抽取出来-->
        <property name="list" ref="list"></property>
    </bean>
</beans>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值