spring,springMVC,SpringBoot不是互斥的
boot是框架,引入了第三方和很多依赖,像12306,MVC是这其中一个功能
spring量大核心思想,ioc,aop
spring是包含了众多工具方法的IoC容器
IOC是控制反转,对象控制权,正常谁用谁控制也就是new一个,现在同一交给spring使用
lombok和web勾上
di,依赖注入
容器在运⾏期间, 动态的为应⽤程序提供运⾏时所依赖的资源,称之为依赖注⼊。
相对应的使用就是DI,通过依赖注入,从ioc的容器中去拿这个对象进行注入进来
用@Component,把这一对象放进spring容器中
之后就不用new了
用@Autowired,取出来,并赋值给那个
- 类注解:@Controller、@Service、@Repository、@Component、@Configuration.
- ⽅法注解:@Bean.,需要配合类注解使用,创建第三方的时候用,或者同一个类需要多个对象
service业务逻辑层,service包下面
Repository数据持久层,dao里面
添加有参的时候建议把无参的加上,data完事之后,
有参@AllArgsConstructor
无参@NoArgsConstructor
一个类型创建两个对象,用context.getBean拿,括号里面,可以(类型.class),但是同一个类型多个对象就不可以了,("名字",类型.class),("名字")去拿bean对象
bean name默认规则
- 五大注解: bean name为
1)如果类名前两位为大写,则bean name为类名本身
2)其他情况: bean name为类名的小驼峰写法 - @Bean:bean name为方法名
这个是默认的,可以修改,在controller后面括号引号
@Bean是括号里面name="......"
里面甚至可以是数组,数组是小括号里面加个大括号
spring启动的时候先看启动类在哪里,在这个对应路径下面找五大注解类,所以他放的位置不重要
DI
依赖注入实现,也就是创建过程
DI三种方式
- Autowired属性注入
- 构造方法注入,正常右键有参构造床阿金
只有一个构造方法时,默认就执行这一个构造方法
当有无参的构造方法时,默认执行无参的构造方法
当有多个的构造方法时?
没有无参构造方法,且有多个有参构造时,运行报错,想走无参,可通过autowired指定,否则走无参 - setter方法注入,还是generate,需要用到autowired才能使用
属性注入的时候,在最上面声明多个引用变量的时候,每一个都要加上autowired,不能final
set也不能final,构造方法可以final
开发中最常见的是属性注入
对于同一个类有多个对象时,使用autowired有问题,解决方案,
- @Primary,在对象里面选一个最主要的
- @Qualifier("bean名称"),一定要配合autowired使用
- @Resource(name="名字")
后两个使用的多,如果这三个都不用,会根据声明的变量名字来找,或者看是不是只有一个
面试题
autowired和resource区别
- @Autowired是spring框架提供的注解,而@Resource是JDK提供的注解
- @Autowired 默认是按照类型注入,而@Resource是按照名称注入,相比于@Autowired来说,@Resource支持更多的参数设置,例如name设置,根据名称获取 Bean.