在spring的对象文件中,给Java对象的属性赋值:

    di依赖注入,表示创建对象,给属性赋值di的实现方法有两种:1、在spring的配置文件中,使用标签完成,叫做基于XML的di实现2、使用spring中的注解,完成属性赋值,叫做基于注解的id实现di的语法分类:1、set注入(设值 注入):spring调用类的set方法实现属性的赋值。2、构造注入:spring调用类的有参数的构造方法,创建对象,在构造方法中完成赋值

基于XML的di实现

注入:赋值
简单类型:spring中规定Java的基本数据类型和String都是简单类型
di:给属性赋值

https://zhuanlan.zhihu.com/c_1156964997023358976​zhuanlan.zhihu.com

需要更多Java面试资料和学习干货可以关注我,我的专栏【Java架构度寒冬】,本专栏会长期更新java架构技术以及心得等精彩文章

1、set注入(设值注入)

spring调用类的set方法,你可以在set方法中完成属性的赋值

简单类型的set注入:

<bean id=“这个对象的唯一标识,通过id找到对象” class= "创建对象的类的全限定名称">
<property name="属性名" value="赋的值"></property>
</bean>

一个property只能给一个属性赋值 需要有set方法,否则会报错

引用类型的设值注入

<bean id=“这个对象的唯一标识,通过id找到对象” class= "创建对象的类的全限定名称">
<property name="属性名" ref="bean的id(对象的名称)" />一个property只能给一个属性赋值
</bean>

xml文件中的代码:(使用set方法赋值<property>标签)

<bean id="school" class="com.yky.domain.School"><property name="name" value="湖中医" /><property name="address" value="湖北" />
</bean>
<bean id="student01" class="com.yky.domain.Student"><property name="name" value="张三" /><property name="age" value="19" /><!--引用类型赋值:ref的值就是该类型的对象的id--><property name="school" ref="school"/>
</bean>

2、构造注入

spring调用类有参数构造的方法,在创建对象的同时,在构造方法中赋值 构造注入使用<constructor-arg>标签

<constructor-arg> 标签:一个表示构造方法一个参数

<constructor-arg>属性:

name:表示构造方法的形参名
index:表示构造方法的参数的位置,参数从左往右位置是0,1,2的顺序(在按顺序传参时,可以省略)
value:构造方法的形参类型的简单类型的,使用value
ref:构造方法的形参类型是引用类型的,使用ref

代码(<constructor-arg>中的name-value的格式使用)

<bean id="student02" class="com.yky.domain.Student"><constructor-arg name="name" value="李四" /><constructor-arg name="age" value="19" /><constructor-arg name="school" ref="school" />
</bean>

代码(<constructor-arg>中的index-value的格式使用,当参数为有序的时候index可以省略)

 <bean id="student03" class="com.yky.domain.Student"><constructor-arg index="0" value="李四" /><constructor-arg index="1" value="19" /><constructor-arg index="2" ref="school" />
</bean>

3、引用类型的自动注入

    spring框架根据某些规则可以给引用类型赋值,不用你再给引用类型赋值了常用规则:byName,byType

  • byType自动注入(按类型自动注入)
  1. Java类中引用类型的数据类型和bean的class值是一样的
  2. Java类中引用类型的数据类型和bean的class的值是父子关系
  3. Java类中引用类型的数据类型和bean的class的值接口和实现类的关系

语法:

<bean id="" class="" autowire="byType">简单类型赋值</bean>

注意:

在byType中,在xml配置文件中声明bean只能有一个符合条件的,多于一个就是多余

代码:

<!--学校--><bean id="school" class="com.yky.domain.School"><property name="name" value="湖中医" /><property name="address" value="湖北" />
</bean>
<!--学生-->
<bean id="student03" class="com.yky.domain.Student" autowire="byType"><property name="name" value="王五" /><property name="age" value="20" />
</bean>

  • byName自动注入(按名称自动注入)

Java类中 引用用类型的属性名和spring容器中(配置文件)<bean>的id一样,且数据类型是一致的,这样的容器中的bean,spring能够根据名称赋值给引用类型

<bean id="school" class="com.yky.domain.School"><property name="name" value="湖中医" /><property name="address" value="湖北" />
</bean><!--学生--><bean id="student03" class="com.yky.domain.Student" autowire="byName"><property name="name" value="王五" /><property name="age" value="20" />
</bean>

4、多个配置文件:(分模块的配置文件)

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

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

    多个文件的分配方式:1、按功能模块,一个模块一个配置文件2、按类的功能,数据库相关的配置一个配置文件,做事务的功能一个配置文件…

包含关系的配置文件:

    主配置文件:包含其他区配置文件的,主配置文件一般不定义对象语法:<import resource ="classpath:其他配置文件的路径" />关键字:"classpath:"表示类路径(class文件所在的目录)在spring的配置文件中要指定其他文件的位置,需要classpath,告诉spring到哪里去加载读取文件

在包含关系的配置文件中,可以使用通配符(*:表示任意字符),可以把某些符合条件的文件一次加载进来

总配置文件:

<!--主配置文件负责把各模块连接起来-->
<import resource="classpath:di01/spring-student.xml" />
<import resource="classpath:di01/sprinh-school.xml" />

各模块配置文件的写法:

  <bean id="studentdi01" class="com.yky.domain.Student" autowire="byType"><property name="name" value="赵六" /><property name="age" value="19" /></bean>
<bean id="school" class="com.yky.domain.School" ><property name="name" value="湖中医" /><property name="address" value="武汉" />
</bean>

基于注解的DI:通过注解完成Java对象创建,属性赋值

学习的注解:

    @Component:放在类上面生成对象,或给对象赋值@Respotory:@Service@Controller@Value:给对象赋值,set方法上面,也可以放在属性上面@Autowired:自动注入,默认byType,spring框架自带的 ,requied = true,如果要使用byName@Q…(value="")@Resource:自动注入的,默认byName,当byName不能成功赋值时,会使用byType

步骤:

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

xml文件中添加组件扫描器

<!--
添加组件扫描器
<context:component-scan base-package="com.springdemo.di01" />添加组件扫描器以后:xml文件会增加spring-context.xsd约束文件context:表示的是哪个约束文件约束的标签component-scan :组件扫描器标签base-package:指定包,组件扫描器就会扫描包下以及子包下的所有类,如果有注解就会生成相应的对象或给属性赋值,放入到容器中
-->
<context:component-scan base-package="com.yky.di02" />

给类添加注解,并赋值

@Component(value = "studentdi02")
public class Student {@Value("东方不败")private String name;@Value("18")private Integer age;/*** @Autowired* 给引用类型赋值*底层原理是自动注入,默认byType* 当想要使用byName是添加注解@Qualifier(value = "<bean>的id")*/@Autowired@Qualifier(value = "myschool")private School school;
@Component(value = "myschool")
public class School {@Value("湖中医")private String name;@Value("武汉")private String address;

  • @Component注解:调用无参构造方法
当只有一个参数的时候value可以省略
也可以不指定value的值,使用spring的默认名称(默认的名称就是类名的首字母小写)
spring中和Component功能一致,创建对象的还有

  • @Respotory:(持久层注解)放在Dao的实现类上面,表示创建dao对象,dao对象是能够访问数据库的
  • @Service:(业务层类)放在service的实现类上面,创建service对象,service对象是业务处理,可以有事务功能的
  • @Controller:(控制器)放在控制器(处理器)类上面的,创建控制器对象的,控制器对象,能够接受用户提交的处理参数,显示请求的处理结果

三个注解使用和@Component使用语法一样,但是这三个还有额外的功能,给项目分层

指定多个包的方式:

  • 使用多次组件扫描器,指定不同的包
<context:component-scan base-package="com.springdemo.di02" />
<context:component-scan base-package="com.springdemo.di01" />

  • 使用分隔符(";“或”,")分隔多个包名
<context:component-scan base-package="com.springdemo.di01,(或者“;”)com.springdemo.di02" />

  • 指定父包(不建议使用顶级父包,会扫描无用的包)
<context:component-scan base-package="com.springdemo"/>

1、简单类型的赋值:

@value:value是String类型的,表示简单类型的属性值

位置:

  • 在属性定义的上面,无需set方法,推荐使用
@Component("di02school")
public class School {@Value("湖中医")private String name;@Value("武汉")private String address;

  • 在set方法的上面

2、引用类型赋值:

  • @Autowired

spring框架提供的注解,实现引用类型的赋值

spring中通过注解给引用类型赋值,使用的是自动注入原理,支持byType,byName

默认是byType

属性:

  • required:是一个boolean类型的,默认true
  • required = true:表示引用类型赋值失败,程序报错,并终止执行
  • required = false:表示引用类型赋值失败,程序正常执行,引用类型是null

添加注解的位置:

  • 在属性定义的上面,无需set方法(推荐)
  • set方法上面

byType:

  • School类型:
@Component("myscholl")
public class School {@Value("湖中医")private String name;@Value("武汉")private String address;

  • Student类型:
@Component("di03student")
public class Student {@Value("都放假了")private String name;@Value("52")private int age;//@Autowired:使用的自动注入,默认是byType(根据类型查找)@Autowiredprivate School school;byName:@Component("di03student")public class Student {@Value("都放假了")private String name;@Value("52")private int age;//@Autowired:使用的自动注入,默认是byType(根据类型查找)/***  @Autowired  :表示自动注入*  @Qualifier(value = "myshool"):表示通过名字寻找这个引用类型类型的对象*/@Autowired@Qualifier(value = "myshool")private School school;

  • @Resource

来自jdk中的注解,spring框架提供了对这个注解的支持,可以使用它给引用类型赋值

使用的也是自动注入原理,支持byName,byType,默认是byName

默认先使用byName,byName失败再使用byType

只使用byName:增加一个属性name

位置:

  • set方法上面
  • 属性上面,无需set方法(推荐)
@Component("di04student")
public class Student {@Value("符合实际")private String name;@Value("23")private int age;
//@Resource
//jdk自带的,也是依据自动注入原理实现的,默认byName,当byName失败时,就会使用byType
@Resource(name = "myshool")private School school;

  • 添加依赖:
<dependency><groupId>javax.annotation</groupId><artifactId>javax.annotation-api</artifactId><version>1.3.1</version>
</dependency>

配置文件和${}结合

1、建立资源文件:

2、在配置文件中,添加资源文件加载的标签

<!--加载资源文件-->
<context:property-placeholder location="classpath:di02/test.properties" />

3、用注解给属性赋值@Value("${资源文件中对应的key}")

@Component(value = "di03student")
public class Student {@Value("${di03.student.name}")private String name;@Value("${di03.student.age}")private Integer age;@Resource(name = "myshool")private School school;

作者:爱敲代码的小游子
原文链接:https://blog.csdn.net/qq_44895397/article/details/106630288

@autowired注解原理_Spring框架第二谈:IOC,xml配置文件给属性赋值,注解实现赋值...相关推荐

  1. 底层原理_Spring框架底层原理IoC

    一.概述 Spring是一个轻量级的开源JavaEE框架 Spring可以解决企业应用开发的复杂性 Spring两大核心部分:IoC和AOP 特点: 方便解耦,简化开发 AOP编程支持 方便程序测试 ...

  2. MyBatis框架学习 DAY_02:使用XML配置文件/多参数问题 / FOREACH /IF / #{}和${} / 创建SSM框架流程

    XML文件配置SQL 1. 使用XML文件配置SQL语句 2. 关于多参数的问题 2. 练习 3. 动态SQL -- foreach 4. 动态SQL -- if 5. 关于#{}和${}格式的占位符 ...

  3. Spring框架----Spring常用IOC注解的分类

    学习基于注解的IOC配置,我们应该知道,注解配置和xml配置要实现的功能都是一样的,都是要降低程序的耦合,只是配置的形式不一样, 关于实际的开发中到底是使用xml还是注解,每家公司有着不同的使用习惯, ...

  4. Spring框架中XML配置文件注入集合(数组、LIST、MAP、SET)属性

    Spring框架中XML配置文件注入集合属性 前言 创建测试类与属性 配置XML配置文件 建立调用类 调用结果 前言 某些类的属性是可能是集合,包括:数组.LIST.MAP.SET等集合,在Sprin ...

  5. Spring框架XML配置文件使用外部Bean属性注入

    Spring框架XML配置文件使用外部Bean属性注入 (1)创建两个类service类和dao类 (2)在service中调用dao里面的方法 (3)使用Spring框架进行调用 (4)创建测试类 ...

  6. spring security 注解_Spring框架使用@Autowired自动装配引发的讨论

    原文首发于掘金 作者:walkinger 链接:https://juejin.im/post/5d4163ede51d4561f64a078b 问题描述 有同事在开发新功能测试时,报了个错,大致就是, ...

  7. @autowired注解原理_SpringBoot注解大全,收藏一波!!!

    一.注解(annotations)列表 二.注解(annotations)详解 三.JPA注解 四.springMVC相关注解 五.全局异常处理 <Java 2019 超神之路> < ...

  8. java spring框架 注解_spring框架之注解的使用

    原标题:spring框架之注解的使用 今天是刘小爱自学Java的第122天. 感谢你的观看,谢谢你. 学习内容安排如下: Spring注解的使用. JavaWeb项目的搭建. Spring的Web集成 ...

  9. @select注解_SSM框架(十三):Spring框架中的IoC(3)新注解,完全摆脱xml文件

    spring中的新注解 1.Configuration 作用:指定当前类是一个配置类 细节:当配置类作为AnnotationConfigApplicationContext对象创建的参数时,该注解可以 ...

最新文章

  1. Maven 配置环境变量后无法立刻生效-原因是黑窗口是配置前打开的,重新打开即可
  2. V100服务器和T4服务器的性能指标
  3. JavaScript中常用的BOM属性
  4. jQuery子页面获取父页面元素
  5. 笑看职场什么程序员才抢手,什么样的程序员涨薪多?
  6. 多存多取问题 java
  7. OPENSSL编程 第二十章 椭圆曲线
  8. Strategy模式C++实现
  9. javaweb实现教师和教室管理系统 java jsp sqlserver
  10. 人工智能项目案例:AI+企业智能化管理
  11. 红警代码开源了 来瞅瞅源码 文内送Win10可联机的红警2标准版游戏
  12. HCIP2------BGP1
  13. 网页崩溃原因软件测试,支招:原来这些才是APP崩溃的主要原因!资深技术大牛测试经验总结...
  14. VMware中的虚拟机开启VT,支持KVM
  15. python实现自幂数
  16. sendgrid html text,Laravel + SendGrid htmlspecialchars()期望参数1为字符串,给定对象
  17. 高通骁龙410e/APQ8016E嵌入式物联网模块芯片
  18. 时尚集团副总裁西单解密《时尚江湖》
  19. 大数据训练营课程大纲项目简介
  20. python中括号的作用_浅析python 中大括号中括号小括号的区分

热门文章

  1. docker hub加速访问hub.docker.com
  2. 自定义request_ASP.NET Core 学习之自定义异常处理
  3. 基于JAVA+SpringMVC+Mybatis+Vue+MYSQL的大学体育健康管理系统
  4. Error:No cached version of com.android.tools.build:gradle:2.0.0 available for offline mode
  5. 解决:jsp 页面不全,response 内容不完整
  6. kubernetes下的Nginx加Tomcat三部曲之一:极速体验
  7. windows常见快捷键
  8. 试一下live writer 插入代码是否会高亮
  9. C++设计模式-Command命令模式
  10. 国际旅游管理专业跨专业考计算机,第二年跨校跨专业考旅游管理公费成功,一点经验给大家...