Spring框架笔记-IOC容器2

接上个笔记
https://blog.csdn.net/weixin_52003758/article/details/124214494
3、XML注入其他类型属性
1、字面量
(1)NULL值
<property name="name" value="">
	<null/>
</property>
(2)属性值包含特殊符号
	a.把<>进行转义&lt, &gt
	b.把带特殊符号内容写到CDATA里
	<property name="name">
        <value><![CDATA[<<南京>>]]></value>
    </property>

2、注入属性-外部bean
	(1)创建两个类service类和dao类
	(2)在service调用dao里面的方法
	
	<bean id="userService" class="com.company.UserService">
		<!--
			name : 类里面属性名称
			ref  : 创建userDao对象bean标签的id值
		-->
		<property name="userDao" ref="userDaoImpl"></property>
	</bean>
	<bean id="userDaoImpl" class="com.company.UserDaoImpl"></bean>
3、注入属性-内部bean
4、注入集合类属性
// Course.java
package com.company;

public class Course {
    private String cname;

    public void setCname(String cname){
        this.cname = cname;
    }
}
//Stu.java
package com.company;

import java.util.List;
import java.util.Map;
import java.util.Set;

public class Stu {
    // 1、数组类型属性
    private  String[] courses;
    // 2、list集合类型属性
    private List<String> list;
    // 3、map集合类型属性
    private Map<String, String> maps;
    // 4、set集合类型属性
    private Set<String> sets;
    // 5、自定义类属性
    private List<Course> l_courses;

    public void setCourses(String[] courses){
        this.courses = courses;
    }
    public void setList(List<String> list){
        this.list = list;
    }
    public void setMaps(Map<String, String> maps){
        this.maps = maps;
    }
    public void setSets(Set<String> sets){
        this.sets = sets;
    }
    public void setL_courses(List<Course> l_courses) {
        this.l_courses = l_courses;
    }
}
// bean1.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="stu" class="com.company.Stu">
        <!-- 1、数组类型属性 -->
        <property name="courses">
            <list>
                <value>java课程</value>
                <value>数据库课程</value>
            </list>
        </property>
        <!-- 2、list类型属性 -->
        <property name="list">
            <list>
                <value>gujia</value>
                <value>liujiale</value>
            </list>
        </property>
        <!-- 3、map类型属性 -->
        <property name="maps">
            <map>
                <entry key="Java" value="java"></entry>
                <entry key="PHP" value="php"></entry>
            </map>
        </property>
        <!-- 4、set类型属性 -->
        <property name="sets">
            <set>
                <value>Mysql</value>
                <value>Redis</value>
            </set>
        </property>
        <!-- 5、注入类型是list集合类型,值是对象 -->
        <property name="l_courses">
            <list>
                <!-- bean里面放实例化的bean的id值 -->
                <ref bean="course1"></ref>
                <ref bean="course2"></ref>
            </list>
        </property>
    </bean>
    <!-- 创建多个course对象 -->
    <bean id="course1" class="com.company.Course">
        <property name="cname" value="Spring"></property>
    </bean>
    <bean id="course2" class="com.company.Course">
        <property name="cname" value="Vue"></property>
    </bean>
</beans>

1

FactoryBean
1、Spring有两种类型的bean,一种普通的bean,另一种工厂bean(FactoryBean)
2、普通bean:在配置文件中定义bean类型就是返回类型
3、工厂bean:在配置文件定义bean类型可以和返回类型不一样
第一步 创建类,让这个类作为工厂bean,实现接口FactoryBean
第二步 实现接口里面的方法,在实现的方法中定义返回的bean类型
//Mybean.java
package com.company;

import org.springframework.beans.factory.FactoryBean;

public class MyBean implements FactoryBean<Course> {

    // 定义返回bean
    @Override
    public Course getObject() throws Exception {
        Course course = new Course();
        course.setCname("abc");
        return course;
    }

    @Override
    public Class<?> getObjectType() {
        return null;
    }

    @Override
    public boolean isSingleton() {
        return false;
    }

}
// Main.java
package com.company;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        // 返回的是Course类型的,因此需要改动为Course.class
        Course mybean = context.getBean("myBean", Course.class);
        System.out.println(mybean);
    }
}
<!-- Bean1.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="myBean" class="com.company.MyBean"></bean>
</beans>
Bean的作用域
1、在Spring里,设置创建bean实例是单实例还是多实例
2、在Spring里,默认情况下,bean是单实例
3、如何设置单实例还是多实例
	(1)在Spring配置文件bean标签里面有属性(scope)用于设置单实例还是多实例
	(2)scope属性值
		第一个 默认值 singleton,表示单实例对象,在创建Spring配置文件的时候就已经创建实例对象
		第二只 prototype,表示多实例对象。在实例化对象的时候,才进行创建实例对象
Bean生命周期
1、执行无参数构造创建bean实例
2、为bean的属性设置值和对其他bean引用(调用set方法)
3、调用bean的舒适化的方法(需要进行配置初始化的方法)
4、bean可以使用,对象获取bean实例化内容
5、当容器关闭的时候,调用bean的销毁方法(需要自己配置销毁的方法)
	<bean id="myBean" class="com.company.MyBean" init_method="初始化函数" destroy-method="销毁函数"></bean>
xml自动装配
(1)根据指定装配裹着(属性名称或者属性类型),Spring自动将匹配的属性值进行注入
<!-- 在Emp类里有一个私有成员:private Dept dept; 
    实现自动装配
    bean标签属性autowrite,配置自动装配
	autowrite属性常用两个值:
		byName根据属性名称注入:注入bean的id值要和类属性名称一样
		byType根据属性类型注入,但是bean里不能同时出现几个同一类型的id,无法确定哪一个bean注入
-->
<bean id="emp" class="com.company.Emp" autowrite="byName">
</bean>
<bean id="dept" class="com.company.Dept"></bean>
Bean外部属性文件
1、直接配置数据库信息
	(1)配置德鲁伊连接池
	(2)引入德鲁伊连接池依赖jar包:druid.jar
	<!-- 直接配置连接池 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>  <!-- 驱动名称 -->
        <property name="url" value="jdbc:mysql://local:3306/myDB"></property>       <!-- 数据库链接地址 -->
        <property name="username" value=""></property>
        <property name="password" value=""></property>
    </bean>
2、通过引入外部属性文件配置数据库连接池
	(1)创建外部属性文件,properties格式文件,写数据库信息
	(2)把外部的properties属性文件引入到Spring配置文件中
		引入context名称空间
		在Spring配置文件中使用标签引入外部属性文件
# jdbc.properties
prop.driverClass = com.mysql.jdbc.Driver
prop.url = jdbc:mysql://local:3306/myDB
prop,userName = root
prop.password = root
<!-- bean.xml -->
<?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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"
>

    <!-- 引入外部的属性文件 -->
    <context:property-placeholder location="classpath:jdbc.properties"/>
    <!-- 配置连接池 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${prop.driverClass}"></property>   <!-- 驱动名称 -->
        <property name="url" value="${prop.url}"></property>        <!-- 数据库链接地址 -->
        <property name="username" value="${prop,userName}"></property>
        <property name="password" value="${prop.password}"></property>
    </bean>
</beans>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

horizonTel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值