目录
🌟一、创建最原始的Spring-core项目。
🌟二、怎么往Spring中存取对象?
🌷1、在Spring中存对象
🌷2、通过getBean获取对象的三种方式
🌷3、通过factory方式获取对象
🌟三、对存对象的优化:添加注解存储 Bean 对象
🌷1、类注解:五大注解
1.1 五大注解的使用方法:@Controller(控制器存储)
1.2 五大注解之间的关系
🌷2、方法注解@Bean
🌷3、重命名@Bean
3.1 对Bean重命名
3.2 五大注解的重命名
3.3 如何给@Bean添加参数
🌟一、创建最原始的Spring-core项目。
1、创建一个maven项目。
2、引入Spring依赖。
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.13.RELEASE</version>
</dependency>
</dependencies>
3、添加一个启动类
🌟二、怎么往Spring中存取对象?
首先知道对象。在Spring中对象也叫作Bean。
🌷1、在Spring中存对象
先创建一个对象:比如User类。——> 在Spring中进行定义管理:在resources文件下,新建一个xml文件名为“spring-config.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">
</beans>
🌷2、通过getBean获取对象的三种方式
方式1:id要是唯一的。有两个对应关系。id指的是对象的id,class后的路径是全限类名(包名称.类名)
当一个类有多个对象的时候:成功
方式2:类获取
当一个类有多个对象的时候:报错
方式3:上面两种的结合
验证上面三种方式拿到的对象是不是同一个?
🌷3、通过factory方式获取对象
已经不推荐使用了。
问题1:beanFactory与ApplicationContext方式的区别?
(1)共同点:都是用于获取Springbean的;
(2)不同点:
- Spring 容器有两个顶级的接⼝:BeanFactory 和ApplicationContext。其中 ApplicationContext是BeanFactory的一个子类。它除了继承了 BeanFactory 的所有功能之外,还拥有独特的特性,还添加了对国际化⽀持、环境、资源访问⽀持、以及事件传播等⽅⾯的⽀持。
- ApplicationContext 是提前将所有的bean全部加载完,使用的时候直接获取,⽽BeanFactory 是懒加载的方式,使用的时候才去创建。
🌟三、对存对象的优化:添加注解存储 Bean 对象
🌷1、类注解:五大注解
1.1 五大注解的使用方法:@Controller(控制器存储)
创建spring-config.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"
xmlns:content="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<content:component-scan base-package="com.bit.service"></content:component-scan>
</beans>
我们先来观察下面两种现象:
现象1:
(1)配置扫描路径:spring-configxml文件下
(2)在类上加注解
(3)main方法中
现象2:
我现在对上面的代码只改动一处:将类名从UseController改为UController。理论上来说没有任何问题吧,名字又不影响代码本身运行。但是当我们运行代码之后,结果却出乎意料,它竟然报错了。这个时候我们就要俩看一下源码来观察到底Bean是怎么命名的?
看源码观察Bean的名称的命名规则(重点)
所以现象2中,name(也就是传进来的类名UController)长度大于1并且名字前两位是大写,返回的是名字自身,因此代码应该这样写:
当名称前两个字母是大写并且长度大于1的时候,要写类名本身。否则是:类名的第一个字母小写即可。
(还有一种重命名的方式,见第三节介绍!)
@Service(控制器存储)@Repository(仓库存储)@Component(组件存储)@Configuration(配置存储)用法都同上。
问题2:为什么要用这么多注解?
为什么需要怎么多的类注解也是相同的原因,就是让程序员看到类注解之后,就能直接了解当前类的⽤途。提升性能。
1.2 五大注解之间的关系
@Controller / @Service / @Repository / @Configuration都是属于 @Component 的“⼦类”。
🌷2、方法注解@Bean
1、@Bean必须搭配五大注解使用;
2、@Bean的名称是方法名,要一模一样!
🌷3、重命名@Bean
3.1 对Bean重命名
(1)情况1:单个名称
@Bean后面给定新的名称,在getBean获取的时候也是新的名称。
@Bean("ccc")
(2)情况2:多个名称
@Bean(name= {"aaa","bbb"})
这个重命名的 name 其实是⼀个数组,⼀个 bean 可以有多个名字。并且 name={} 可以省略。@Bean({"aaa", "bbb"})。
3.2 五大注解的重命名
这种重命名的方式对于五大注解也是适用的!
3.3 如何给@Bean添加参数
常规写法:
(1)代码中写构造函数来传参
user方法中需要一个Integer类型和String类型的参数,就会在容器中去找String类型和Integer类型,找到了就放进去。
后来又在想,如果有多个相同的类型的话,该找哪一个呢?然后我又做了个验证,发现如下结果:
如果有一个,就以类型来匹配!如果有多个,就以名称来匹配!
(2)Spring中xml文件配置的方式,如何传参 。
运行结果
加油!别放弃!