@componentscan配置多个扫描包_Spring框架第⼆谈:
IOC,xml配置⽂件。。。
推荐学习
啃完这份宝藏级“Spring⾼级源码笔记”,⾯试P7问源码还会⼼虚?
阿⾥架构师总结Spring核⼼系列:Spring,Cloud,Spring5,MVC等
Spring复习⼤纲:依赖注⼊Ioc+Beans+注解+数据访问+AOP+MVC等
在spring的对象⽂件中,给Java对象的属性赋值:
di依赖注⼊,表⽰创建对象,给属性赋值 di的实现⽅法有两种: 1、在spring的配置⽂件中,使⽤标签完成,叫做基于XML的di实现 2、使⽤spring中的注基于XML的di实现
注⼊:赋值简单类型:spring中规定Java的基本数据类型和String都是简单类型di:给属性赋值
1、set注⼊(设值注⼊)
spring调⽤类的set⽅法,你可以在set⽅法中完成属性的赋值
简单类型的set注⼊:
⼀个property只能给⼀个属性赋值 需要有set⽅法,否则会报错
引⽤类型的设值注⼊
⼀个property只能给⼀个属性赋值
xml⽂件中的代码:(使⽤set⽅法赋值标签)
2、构造注⼊
spring调⽤类有参数构造的⽅法,在创建对象的同时,在构造⽅法中赋值 构造注⼊使⽤标签
标签:⼀个表⽰构造⽅法⼀个参数
属性:
name:表⽰构造⽅法的形参名index:表⽰构造⽅法的参数的位置,参数从左往右位置是0,1,2的顺序(在按顺序传参时,可以省略)value:构造⽅法的形参类型的简代码(中的name-value的格式使⽤)
代码(中的index-value的格式使⽤,当参数为有序的时候index可以省略)
3、引⽤类型的⾃动注⼊
spring框架根据某些规则可以给引⽤类型赋值,不⽤你再给引⽤类型赋值了常⽤规则:byName,byType
byType⾃动注⼊(按类型⾃动注⼊)
1. Java类中引⽤类型的数据类型和bean的class值是⼀样的
2. Java类中引⽤类型的数据类型和bean的class的值是⽗⼦关系
3. Java类中引⽤类型的数据类型和bean的class的值接⼝和实现类的关系
语法:
简单类型赋值
注意:
在byType中,在xml配置⽂件中声明bean只能有⼀个符合条件的,多于⼀个就是多余
代码:
byName⾃动注⼊(按名称⾃动注⼊)
Java类中 引⽤⽤类型的属性名和spring容器中(配置⽂件)的id⼀样,且数据类型是⼀致的,这样的容器中的bean,spring能够根据名称赋
值给引⽤类型
4、多个配置⽂件:(分模块的配置⽂件)
1、每个⽂件的⼤⼩⽐⼀个⽂件要⼩得多,效率⾼
2、避免多⼈竞争冲突
如果项⽬有多个模块(相关功能在⼀起),⼀个模块⼀个配置⽂件
多个⽂件的分配⽅式: 1、按功能模块,⼀个模块⼀个配置⽂件 2、按类的功能,数据库相关的配置⼀个配置⽂件,做事务的功能⼀个配置⽂件…
包含关系的配置⽂件:
主配置⽂件:包含其他区配置⽂件的,主配置⽂件⼀般不定义对象语法:关键字:"classpath:"表⽰类路径(class⽂件所在的⽬录) 在spring的配置⽂件中要指在包含关系的配置⽂件中,可以使⽤通配符(*:表⽰任意字符),可以把某些符合条件的⽂件⼀次加载进来
总配置⽂件:
各模块配置⽂件的写法:
基于注解的DI:通过注解完成Java对象创建,属性赋值
学习的注解:
@Component:放在类上⾯⽣成对象,或给对象赋值 @Respotory: @Service @Controller @Value:给对象赋值,set⽅法上⾯,也可以放在属性上⾯ @步骤:
1. 加⼊maven依赖 spring-context,在你加⼊spring-context的同时,间接加⼊spring-aop的依赖使⽤注解必须使⽤spring-aop依赖
2. 在类中加⼊spring的注解(多个不同功能的注解)
3. 在spring的配置⽂件中,加⼊⼀个组件扫描器的标签,说明注解在你的项⽬中的位置
4. 创建spring容器:ApplicationContext,获取对象
xml⽂件中添加组件扫描器
给类添加注解,并赋值
@Component(value = "studentdi02")public class Student { @Value("东⽅不败") private String name; @Value("18") private Integer age; /** * @Autowire @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使⽤语法⼀样,但是这三个还有额外的功能,给项⽬分层
指定多个包的⽅式:
使⽤多次组件扫描器,指定不同的包
使⽤分隔符(";“或”,")分隔多个包名
指定⽗包(不建议使⽤顶级⽗包,会扫描⽆⽤的包)
1、简单类型的赋值:
@value:value是String类型的,表⽰简单类型的属性值
位置:
在属性定义的上⾯,⽆需set⽅法,推荐使⽤
@Component("di02school")public class School { @Value("湖中医") private String name; @Value("武汉") private String address;
spring ioc注解在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:使⽤的⾃动注⼊@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;
添加依赖:
javax.annotationjavax.annotation-api1.3.1
配置⽂件和${}结合
1、建⽴资源⽂件:
2、在配置⽂件中,添加资源⽂件加载的标签
3、⽤注解给属性赋值@Value("${资源⽂件中对应的key}")
@Component(value = "di03student")public class Student { @Value("${di03.student.name}") private String name; @Value("${di03.student.age}") pr
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论