【框架专题】管理型容器——SpringIOC——XML管理全套

XML管理全套——环境准备

maven

      
       <dependency>
           <groupId>org.springframeworkgroupId>
           <artifactId>spring-coreartifactId>
           <version>5.0.0.RELEASEversion>
       dependency>
       
       <dependency>
           <groupId>org.springframeworkgroupId>
           <artifactId>spring-beansartifactId>
           <version>5.0.0.RELEASEversion>
       dependency>
       
       <dependency>
           <groupId>org.springframeworkgroupId>
           <artifactId>spring-contextartifactId>
           <version>5.0.0.RELEASEversion>
       dependency>
       
       <dependency>
           <groupId>org.springframeworkgroupId>
           <artifactId>spring-context-supportartifactId>
           <version>5.0.0.RELEASEversion>
       dependency>
       
       <dependency>
           <groupId>org.springframeworkgroupId>
           <artifactId>spring-expressionartifactId>
           <version>5.0.0.RELEASEversion>
       dependency>

创建ioc.xml文件
【框架专题】管理型容器——SpringIOC——XML管理全套_第1张图片
文件模板:



<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"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
            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-4.0.xsd">
    <bean>
    bean>
beans>

程序入口

public class test01 {
     
    public static void main(String[] args) {
     
        ApplicationContext ac=new ClassPathXmlApplicationContext("bean-ioc.xml");
    }
}

XML管理全套——创建对象

创建普通对象:

都是在创建对象,只是创建方式不一样
如果我要演示就会像视频那样变成几个小时

【1】类构造创建(直接用反射调用无参构造器):
<bean id="HelloService" class="ioc_01.HelloService">bean>
public class HelloWorld {
   public HelloWorld(){
   }
}
【2】类静态方法(调用类中factory-method为方法名的静态方法的的返回值作为对象):
bean>
【3】类依赖(调用容器中另外一个对象的factory-method为方法名的方法的返回值作为对象):
<bean id="d3" factory-bean="d2" factory-method="getTime">bean>=>
【4】有参构造创建(默认调用无参,指定后将根据你的参数列表调用构造器,index是参数列表的位置,如果参数
是值就是value,是容器的某个对象就用ref)
	<bean>
    		<constructor-arg index="0" value="" >constructor-arg>
    		<constructor-arg index="1" ref="">constructor-arg>
	bean>

创建文件对象:

    
    <util:properties id="dbConfig" location="classpath:jdbc.properties" />
    <bean id="jdbcConfig2" class="ioc_01.JdbcConfig">
        <property name="username" value="#{dbConfig['jdbc.username']}">property>
        <property name="password" value="#{dbConfig['jdbc.password']}">property>
    bean>
   
    <context:property-placeholder location="classpath:/jdbc.properties" />
    <bean id="jdbcConfig" class="ioc_01.JdbcConfig">
        <property name="password" value="${jdbc.password}">property>
        <property name="username" value="${jdbc.password}">property>
    bean>

文件对象演示
(1)创建properties文件
【框架专题】管理型容器——SpringIOC——XML管理全套_第2张图片
这种文件类型的特点就是,轻松实现k-v,比如username对应GodSchool这种描述形式;
(2)创建引用该文件值的对象

public class JdbcConfig {
     
    private String username;
    private String password;
    public String getUsername() {
     
        return username;
    }
    public void setUsername(String username) {
     
        this.username = username;
    }
    public String getPassword() {
     
        return password;
    }
    public void setPassword(String password) {
     
        this.password = password;
    }
}

(3)建立xml描述



<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"
       xmlns:aop="http://www.springframework.org/schema/aop" 
       xmlns:util="http://www.springframework.org/schema/util"
       xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
            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-4.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
    
    <util:properties id="dbConfig" location="classpath:jdbc.properties" />
    <bean id="jdbcConfig2" class="ioc_01.JdbcConfig">
        <property name="username" value="#{dbConfig['jdbc.username']}">property>
        <property name="password" value="#{dbConfig['jdbc.password']}">property>
    bean>
   
    <context:property-placeholder location="classpath:/jdbc.properties" />
    <bean id="jdbcConfig" class="ioc_01.JdbcConfig">
        <property name="password" value="${jdbc.password}">property>
        <property name="username" value="${jdbc.password}">property>
    bean>
beans>

(4)测试

public class test01 {
     
    public static void main(String[] args) {
     
        ApplicationContext ac=new ClassPathXmlApplicationContext("bean-ioc.xml");
        JdbcConfig jdbcConfig = ac.getBean("jdbcConfig", JdbcConfig.class);
        JdbcConfig jdbcConfig2 = ac.getBean("jdbcConfig2", JdbcConfig.class);
        Properties properties = ac.getBean("dbConfig", Properties.class);
    }
}

(5)结果
【框架专题】管理型容器——SpringIOC——XML管理全套_第3张图片

XML管理全套——标签属性

<bean   id=""                            map中的key!
        class=""                         类实例包
        scope="prototype/singleton"      多例-线程独立会创建多个、单例-多线程共享;默认单例
        lazy-init="true/false"           懒加载模式,用到这个对时才创建
        init-method="init"               初始化时调用的方法名
        destroy-method="destory"         销毁时调用的方法名
>
bean>

XML管理全套——属性赋值

【赋值基本数据类型】——如果你的属性是级别类型可以直接赋值
<bean class="com.tedu.cn.Entity.User">
    <property name="username" value="luozhifeng">property>
    <property name="password" value="123456">property>
bean>
【赋值简单数据结构】——如果你的属性是map或者list结构
	<bean class="entity">
    		<property name="session">
        			<map>
            			<entry key="lzf" value="12341234">entry>
        			map>
    		property>
    		<property name="names">
        			<list>
            			<value>fuck1value>
            			<value>fuck2value>
            			<value>fuck3value>
            			<value>fuck4value>
        			list>
    		property>
	bean>
【赋值文件对象属性】——如果你的属性是properties文件对象类型
	<property name="properties">
    		<props>
       		 ……
        			<prop key="username">rootprop>
       			<prop key="password">1234prop>
    		props>
	property> 

XML管理全套——引用注入

【引用整个对象】
	<bean class="com.tedu.cn.Entity.User">
		<property name="Childrenlist" ref="Children">property>
	bean>
【引用对象的值】——#作为运算符,拿到容器的某个对象后取他的值
	<bean id="k2" class="Spring.Student">
		<property name="name" value="#{k1.list[1]}">property>
	bean>

XML管理全套——自动装配

autowire=“byName”:很显然,有的时候属性名就是id名,按照这个规范来就可以自动根据属性名作为id装配,不用手动写好关系;
autowire=“byType”:很显然,有的时候属性的类型在容器仅有一个,按照这个规范来就可以自动根据类型装配;

ID名匹配(规范id就是参数名)
public class HelloController {
    private HelloService helloService;//用属性名作为id
    ……
}
    <bean id="helloController" class="ioc_01.HelloController" autowire="byName">bean>
    <bean id="helloService" class="ioc_01.HelloService">bean>//在这里一定要配成一致的
类型匹配(扫描整个项目文件)
	<bean id="stu" class="Spring.Student" autowire="byType"/>
Ps:利用自动装配则无需要去手动建立bean注入的关联,只需要配置好各自的ID以及属性名的规范即可,此处不做过多的代码显示;避免影响笔记的间接性

XML管理全套——扫包创建

很显然我们不希望一个个这样映射对象,直接给包名全部创建不是更改,必须加了特定注解+扫包才能将类的对象放在容器内,基于注解下一章演示;

<context:component-scan base-package="ioc_01">context:component-scan>
ioc_01个包名

后续Spring专题:
SpringIOC——注解管理全套
SpringIOC——内部工具全套
SpringIOC——核心源码剖析
【框架专题】管理型容器——SpringIOC——XML管理全套_第4张图片
GodSchool
致力于简洁的知识工程,输出高质量的知识产出,我们一起努力

你可能感兴趣的:(Java框架专题,spring,java,ioc)