<p id="main-toc"><strong>目录</strong></p>
讯享网
一、Spring最基本的使用
1.创建Maven项目(不需要模板)
2.添加Spring框架支持
3.添加启动类(没啥可说的符合规范即可)
4.创建bean对象
5.将bean对象注册到Spring中
(a)先在resources文件夹中创建一个xml文件(注意:是test文件用了.xml后缀 不是直接创建一个xml文件)
(b)然后在文件中复制配置代码
(c)然后就可以进行正式的注册bean了
6.取出(使用)bean对象
(a)获取上下文对象
(b)取出bean对象
(c)使用(运行结果)
getbean()的三种用法
1.根据id获取bean(一个String参数)
2.根据class获取bean(一个class参数)
3.根据id和class获取bean(一个String参数和一个class参数)
ApplicationContext和BeanFactory的共同点和不同点
共同点:
不同点:
二、快速存储bean对象
1.创建Maven项目
2.添加Spring框架支持
3.添加启动类
4.创建bean对象
5.复制配置代码
6.添加注解
7.取出bean对象
五大注解
@Bean注解
@Bean的改名功能
三、Bean读取(对象装配对象注入)
1.属性注入
2.Setter注入
3.构造注入
@Resource注解
Bean的六种作用域:
Spring的主要执行流程
Bean的生命周期
注意路径要全英文,路径带中文可能会导致不可预知的错误
在pom.xml文件中添加依赖

可直接复制以下代码
讯享网
注意复制依赖后 不要忘记手动导入
IDEA中直接点击这个

就是创建一个普通的类

(a)先在resources文件夹中创建一个xml文件(注意:是test文件用了.xml后缀 不是直接创建一个xml文件)


(酱紫操作)
(b)然后在文件中复制配置代码

©然后就可以进行正式的注册bean了

每注册一个bean 就在这加一行标签
id是自定义的名称 class是要注册的bean类名

在主类中取出对象
(a)获取上下文对象
讯享网
这个参数就是我们上一步中自己创建的xml文件名
(b)取出bean对象
这个参数是我们自己规定的id
这个类名就是步骤4中自己写的类名
(c)使用(运行结果)

可以看出已经成功了
1.根据id获取bean(一个String参数)
讯享网
2.根据class获取bean(一个class参数)
已经知道它的类型了就不用强转类型了
注意如果同一个类(bean)被注册多次的话会报错
3.根据id和class获取bean(一个String参数和一个class参数)
讯享网
共同点:
都用来获取Spring上下文对象
不同点:
1.继承关系和功能: ApplicationContext属于BeanFactory 子类,ApplicationContext具备了BeanFactory 所有的功能和能力。BeanFactory只具备最基础访问Bean 的能力。ApplicationContext 具备更多能力,比如国际化支持、资源访问支持等…
2.性能和加载方式: BeanFactory 按需加载,当需要使用Bean 的时候再加载; ApplicationContext一次性加载所有的Bean。
前四步和上面一样
还是在resources中创建一个.xml文件(强调!和上次相同 是test格式文件 只是命名用.xml后缀)

这个红色框出的是自定义参数:在哪个范围内搜索bean对象

我在java目录下创建了一个Beans包专门保存bean对象 所以这个参数填Beans
在要注册的bean类上面加注解(有五种类注解 下面会详细介绍)

我们这次没有在.xml文件里面指定id 那么我们怎么找到这个bean呢?

bean对象默认id为将类名首字母小写
如Test -> test
特殊情况:当类名首字母和第二个字母均为大写时 自动命名为原类名
TEst -> TEst


启动类上是要引用对应类的
@Controller [控制器]验证前端传递的参数的(安全检查)
@Service [服务层] 服务调用的编排和汇总
@Repository [仓库(数据仓库....) ](直接操作数据库)
@Component [组件] 通用化的工具类
@Configuration [配置]项目的所有配置
这五大注解的用法都是一样的,功能上没有本质差异,使用不同的注解只是代码规范,增加可读性而已
(在SpringMVC中可不一样啊啊)@Controller、@Service、@Repository、@Configuration都是基于@Component实现的
@Bean注解是方法注解要和五大注解搭配使用 且适用于有返回对象的方法
首先我们先创建一个想要使用的类
讯享网
然后在用另一个类去实现Bean注解把它存在Spring中
然后在运行类里面调用

那么我们绕这么多弯弯 实现了原来的功能 这有什么意义呢?
那么久引出了@Bean注解的特殊功能! 改名!
还是原来的程序,在@Bean后面加了参数

运行时就会报错
把运行类的getBean参数改成 @Bean的参数

运行成功!
@Bean的参数有三种写法
@Bean(name = "test1")
@Bean("test1") (相较于上一种省略了name=)
@Bean(name = {"test1","test2"}) (一个Bean起多个名字)
把Bean存入Spring之后的使用,要比获取上下文对象再getbean简单
在一个类中 把bean作为类对象注入
讯享网
创建了一个Demon类 在里面属性注入test

启动类中调用Demon1 运行成功
(如果你是在其他包中创建的另一个类 记得在.xml中包含新的包)
属性注入优点:简单!
缺点: 1.不能注入final修饰的属性
2.只适用于IoC容器
3.因为简单,滥用风险大(容易违背单一设计原则)

(直接右键生成一个Setter方法 在上面加@Autowired)
优点:符合单一设计原则(一个Setter只针对一个对象)
缺点:
1.不能注入一个不可变对象(final)
2.注入对象可能被改变

右键生成大法万岁!
构造方法是官方推荐的注入方法!
优点:
1.可以注入final修饰的(final自身决定的 可以在两种情况下赋初值1.创建时 2.构造方法 也就解释了为什么前两种不可以)
2.注入对象不会被修改(构造方法只调用一次)
3.依赖对象在被使用前一定会被初始化
4.通用性好,因为构造方法是JDK自带的
没有缺点!如果注入太多参数是程序员的问题(?)
@Resource注解可以实现属性注入和Setter注入,不能实现构造注入(使用方法)
@Autowired注解是Spring提供的,@Resource是来自JDK下的注解,所以@Resource的通用性更好 @Resource有更多的参数设置
作用域就是生命周期,默认情况下 作用域是singleton(单例模式)
1.singleton(单例模式) 只有一个全局对象
单例模式会出现一种问题,就是有一个类,这个类本身的内容是A,这时候甲同学根据自己的需求把它修改成了B,然后乙同学再去使用这个类 它的内容就改变了
2.prototype(原型模式) 每次访问都会创建一个对象
3.request(请求作用域)(只能在Spring MVC中使用) 每次Http请求都会创建一个对象
4.session(会话作用域)(只能在Spring MVC中使用) 每次会话都会创建一个对象(即使是同一个用户)
5.application(全局作用域)(只能在Spring MVC中使用)一个http servlet context中共享一个对象
6.websocket:Http WebSocket作用域(只能在WebSocket中使用)
Bean的作用域设置
一、枚举
![]()
枚举方式好一点 因为有自动补全机制
二、参数

1.启动容器(启动类运行、加载配置容器)
2.Bean初始化(对配置文件中的Bean进行扫描 只扫描带有注解的)
3.将Bean对象注入到容器中
4.使用Bean
5.Spring销毁
1.实例化(分配内存空间 不是初始化)
2.设置属性(依赖注入)
3.初始化
执行各种通知(方法)(各种 Aware 方法,如 BeanNameAware、BeanFactoryAware、 ApplicationContextAware 的接口方法)
执行前置方法(BeanPostProcessor )
初始化方法(@PostConstruct和init-method )
初始化后置方法(BeanPostProcessor)
4.使用Bean
5.销毁Bean(执行destroy-method|@PreDestroy)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/161774.html