21.05.08---spring---学习记录(引用类型的注入,di注解)

21.05.08

引用类型的自动注入(通过配置文件)

spring框架根据某些规则可以给引用类型赋值,不用我们在给引用类型赋值。

使用的规则常用的是byName,byType

byName(按名称注入)

byName(按名称注入):
Java类中引用类型的属性名和Spring容器中的配置文件< bean >的id名称一样, 且数据类型是一致的,这样容器中的bean,Spring会自动给引用类型赋值
语法: <bean id="xx" class="yyy" autowire="byName">

<bean id="myStudent" class="com.node.ba04.Student" autowire="byName">

例:
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">


    <!--byName-->
    <bean id="myStudent" class="com.node.ba04.Student" autowire="byName">
        <property name="name" value="李四"/>
        <property name="age" value="20"/>
        <!--引用类型-->
        <!--<property name="school" ref="mySchool"/>-->

    </bean>

    <!--声明School对象-->
    <bean id="school" class="com.node.ba04.School">
        <property name="name" value="清华大学"/>
        <property name="address" value="北京海淀区"/>
    </bean>

</beans>

测试代码

package com.node;

import com.node.ba04.Student;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MyTest04 {
    @Test
    public void test01(){

        String config="ba04/applicationContext.xml";

        ApplicationContext ac=new ClassPathXmlApplicationContext(config);

        Student mystudent= (Student) ac.getBean("myStudent");
        System.out.println("Student对象"+mystudent);

    }
}

byType(按类型注入)

Java类中的引用类型的数据类型和Spring容器中(配置文件)的class是同源的关系,这样才可以赋值给引用类型

同源就是一类的意思:

  1. java类中的引用类型的数据类型和bean的class的值是一样的

  2. java类中的引用类型的数据类型和bean的class的值是父子关系的

  3. java类中的引用类型的数据类型和bean的class的值是接口和实现类关系

注意:在byType中,在xml配置文件中声明bean只能有1个符合同源条件的,多余一个是错误的

语法:<bean id="xx" class="yyy" autowire="byType">

<bean id="myStudent" class="com.node.ba05.Student" autowire="byType">

例:
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">




    <!--byType-->
    <bean id="myStudent" class="com.node.ba05.Student" autowire="byType">
        <property name="name" value="李四"/>
        <property name="age" value="20"/>
    </bean>

    <!--声明School对象-->
    <!--<bean id="mySchool" class="com.node.ba05.School">
        <property name="name" value="山东理工大学"/>
        <property name="address" value="山东淄博"/>
    </bean>-->

    <!--声明PrimarySchool对象-->
    <bean id="mySchool" class="com.node.ba05.PrimarySchool">
        <property name="name" value="山东大学"/>
        <property name="address" value="山东济南"/>
    </bean>

</beans>

测试代码

package com.node;

import com.node.ba05.Student;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MyTest05 {
    @Test
    public void test01(){

        String config="ba05/applicationContext.xml";

        ApplicationContext ac=new ClassPathXmlApplicationContext(config);

        Student mystudent= (Student) ac.getBean("myStudent");
        System.out.println("Student对象"+mystudent);

    }
}

多个配置文件的优势

1每个文件的大小比一个文件要小跟多,效率高
2.避免多人竞争带来的冲突

如果项目由多个模块(相关功能在一起),一个模块一个配置文件

多个配置文件的分配方式

1.按功能模块:一个模块一个配置文件
2.按类的功能:数据库相关的配置一个配置文件,做事务功能的一个配置文件,做service功能的一个配置文件

例:

total.xml表示主配置文件:包含其他的配置文件,主配置文件一般不是定义对象的
total表示主配置文件,加载的是文件列表,不能加载自己

语法:
<import resource="其他配置文件的路径" />

<import resource="classpath:ba06/spring-school.xml" />
    <import resource="classpath:ba06/spring-student.xml" />`

在包含关系的配置文件中 可以使用通配符(* : 表示任意字符)
注意 : 主的配日志文件名称不能包含在通配符范围内 否则会造成死循环
文件需要在一级目录下才能使用通配符

例:
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">

    <!--spring-total表示主配置文件-->
    <!--加载的是文件列表,不能加载自己-->
    <!--<import resource="classpath:ba06/spring-school.xml" />
    <import resource="classpath:ba06/spring-student.xml" />-->

    <!--在包含关系的配置文件中 可以使用通配符(* : 表示任意字符)-->
    <!--注意 : 主的配日志文件名称不能包含在通配符范围内 否则会造成死循环
               文件需要在一级目录下才能使用通配符
    -->
    <import resource="classpath:ba06/spring-*.xml" />

</beans>

在这里插入图片描述

基于di的注解

通过完成java对象创建,实行赋值

使用注解的步骤

1.加入maven的依赖 spring-context。在你加入spring-context的同时,间接加入spring-aop的依赖。
使用注解必须使用spring-aop依赖
2.在类中加入spring的注解(多个不同功能的注解)
3.在spring的配置文件中,加入一个组件扫描器的标签,说明注解在你的项目中的位置

@Component

创建对象的,等同于的功能

属性:value 就是对象的名称,也就是bean的id值
value的值是唯一的,创建的对象在则会那个spring容器就一个
value 可省略 @Component(“myStudent”)
可不指定对象名称,由spring提供默认名称:类名的首字母小写 @Component(“student”)

位置:在类的上面

@Component(value=“myStudent”)等同于<bean id="myStudent" class="com.node.ba05.Student" ">

声明组件扫描器

base-package : 指定注解在你的项目中的包名
component-scan工作方式:spring会扫描遍历base-package指定的包,把包中和子包中的所有类,找到类中的注解,按照注解的功能创建对象,活给属性赋值

加入component-scan标签,配置文件的变化:
1.加入一个性的约束文件spring-context.xsd
2.个这个性的约束文件器个命名空间的名称

<context:component-scan base-package="com.node.ba01"/>

spring中和@Component功能一致,创建对象的注解还有:
在这里插入图片描述

指定多个包的三种方式

第一种方式:使用多次组件扫描器,指定不同的包

<context:component-scan base-package="com.node.ba01"/>
    <context:component-scan base-package="com.node.ba02"/>

第二种方式:使用分割符(;或,)分隔多个包名

<context:component-scan base-package="com.node.ba01;com.node.ba02"/>

第三种方式:指定父包

<context:component-scan base-package="com.node"/>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值