XML管理全套——环境准备

maven

      <!--【Spring util级别的代码封装】,asm、cligb的一些实现在这儿,还有各种处理注解与反射的工具类-->
       <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-core</artifactId>
           <version>5.0.0.RELEASE</version>
       </dependency>
       <!--【Spring bean级别的代码jar包】,基本的IoC/DI的实现,包含访问配置文件、创建和管理bean -->
       <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-beans</artifactId>
           <version>5.0.0.RELEASE</version>
       </dependency>
       <!--【Spring 容器级别的代码jar包】,主要在整个容器层面考虑扩展性以及容器的生命周期等等-->
       <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-context</artifactId>
           <version>5.0.0.RELEASE</version>
       </dependency>
       <!--【Spring 一些应用的扩展jar包】,比如Cache(ehcache)、JCA、JMX、 邮件服务(Java Mail、COS Mail)、任务计划Scheduling(Timer、Quartz)方面的类-->
       <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-context-support</artifactId>
           <version>5.0.0.RELEASE</version>
       </dependency>
       <!--【Spring SPEL表达式的支持】-->
       <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-expression</artifactId>
           <version>5.0.0.RELEASE</version>
       </dependency>

创建ioc.xml文件
在这里插入图片描述
文件模板:

<?xml version="1.0" encoding="UTF-8"?>
<!--beans里配置约束文件,用于提示代码,这里是最完整的-->
<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 id="d2" class="java.util.Calendar" factory-method="getInstance"</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>

创建文件对象:

    <!--将文件加载成为一个properties对象,要用#获取到对象后才能访问-->
    <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文件
在这里插入图片描述
这种文件类型的特点就是,轻松实现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描述

<?xml version="1.0" encoding="UTF-8"?>
<!--beans里配置约束文件,用于提示代码,这里是最完整的-->
<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">
    <!--将文件加载成为一个properties对象,要用#获取到对象后才能访问-->
    <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)结果
在这里插入图片描述

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>fuck1</value>
            			<value>fuck2</value>
            			<value>fuck3</value>
            			<value>fuck4</value>
        			</list>
    		</property>
	</bean>
【赋值文件对象属性】——如果你的属性是properties文件对象类型
	<property name="properties">
    		<props>
       		 ……
        			<prop key="username">root</prop>
       			<prop key="password">1234</prop>
    		</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——核心源码剖析
在这里插入图片描述
GodSchool
致力于简洁的知识工程,输出高质量的知识产出,我们一起努力

Logo

Authing 是一款以开发者为中心的全场景身份云产品,集成了所有主流身份认证协议,为企业和开发者提供完善安全的用户认证和访问管理服务

更多推荐