2.Spring IOC

目录

一.如何进行注册

二、如何进行注入

三、扫描+注解的原理    反射+文件操作

四、什么是IOC/DI?

五、演示使用Spring开发的案例:用户管理|登陆、注册

五、常见错误总结

1、注解使用@Repository

2、UserController的构造方法注入:

3、UserDao


一.如何进行注册

卖方

类的注册:@Component、@Controller、@Service、@Repository、@Configuration

方法的注册:@Bean

二、如何进行注入

买方

1.@Autowired

基于构造方法注入   

基于方法注入


三、扫描+注解的原理    反射+文件操作

以"D:\代码保存\anno"为根目录,扫描根目录下的所有类,根据扫描的结果得到类名(文件名Main.class去掉后面的.class)就是类名com.mxj.ioca.Main

通过反射,得到对应的Class对象,继续利用反射,得到类上的所有注解,根据注解,得到String id,String className。然后利用反射,实例化对象即可。

四、什么是IOC/DI?

IOC(控制反转):由于IOC容器的加入,使得对象A获得依赖对象B的过程,由主动行为变为了被动行为,控制权颠倒过来了,这就是“控制反转”这个名称的由来。

IOC也叫依赖注入(DI):就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。

为什么要弄出这么复杂的流程?而不是自己new 对象?

我们弄出这么复杂的流程,是为了方便程序员开发。实现第三方IOC容器,对象之间的依赖关系已经降低到了最低程度。此时,参与开发的每一个成员只需要完成自己负责的类即可。

IOC简化对象的依赖关系。依赖关系不变,只是我们写代码时只需要考虑“我”依赖什么即可。

IOC带来的好处:我们去依赖抽象的概念,不要去具体的实现。

好处:可以很方便的替换掉背后的依赖对象。

 

 从而实现了从txt中国读取数据,结果如下:

五、演示使用Spring开发的案例:用户管理|登陆、注册

暂时不使用Web形式,直接使用Scanner控制台

1、Spring注册进去的类,默认采用的是单例的模式进行处理

参考https://gitee.com/xiao-jing-men/new-demo

2.Java应用中的对象,大体可以分成两大类:

(1)用来表示一个过程的对象(重要的是对象的方法)

(2)用来表述数据的对象(重要的是方法中的属性)

(3)一般来说,表过程的对象,总是以单例的方式出现。表数据的对象,无法使用单例管理。

所以,一般让Spring管理的对象,大多是表过程的对象(不是绝对的)


一个简单的案例剖析:

五、常见错误总结

1、注解使用@Repository

UserDao:主要是增删查改

 由于是insert语句,所以会自生成uid,这时使用Statement.RETURN_GENERATED_KEYS就可以返回主键。

注意:数据库中uid必须勾选自增否则会出现uid未赋值情况

2、UserController的构造方法注入:

 控制台信息如下:

原因是:我们的UserController依赖的一个类型是java.util.Scnanner的对象,但是这个对象没有被注册进Spring容器中,所以找不到。

修复方法:注册一个java.util.Scanner类型的对象进来。

请问,使用类注册还是方法注册?

这里无法使用类的注册。类的方法注册,要求使用注解修饰要注册的类,但是java.util.Scanner不是我们写的类,我们无法修改源码。

解决方法:

3、UserDao

控制台信息如下:

 大意是缺少dataSource对象,解决方法与第二个相同:

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. Spring IoC 中的依赖注入的方式有哪些?它们有什么区别? 答:Spring IoC 中依赖注入的方式主要包括构造函数注入、Setter 方法注入和字段注入(或属性注入)。它们的区别在于注入的时机和方式不同。 - 构造函数注入:在创建对象时,在对象实例化时传递参数,将依赖的对象作为构造函数的参数传递给目标对象。 - Setter 方法注入:在创建对象后,通过调用目标对象的 Setter 方法进行注入。 - 字段注入:在创建对象后,直接通过反射将依赖的对象注入到目标对象的字段或属性中。 2. Spring IoC 容器的生命周期是怎样的?如何自定义 Spring IoC 容器的生命周期? 答:Spring IoC 容器的生命周期主要涉及容器的创建、初始化、使用和销毁四个阶段。具体如下: - 创建:在容器启动时,根据配置文件或者注解等方式来创建 IoC 容器实例。 - 初始化:在容器创建完成后,容器会对配置文件中的 Bean 进行实例化、依赖注入、AOP 等初始化操作。 - 使用:初始化后的 Bean 可以被容器使用,也可以被其他 Bean 所引用。 - 销毁:当容器关闭时,容器会销毁所有的 Bean,释放资源。 如果需要自定义 Spring IoC 容器的生命周期,可以实现 BeanFactoryPostProcessor 和 BeanPostProcessor 接口。其中,BeanFactoryPostProcessor 接口可以在 IoC 容器创建之后对容器进行修改,而 BeanPostProcessor 接口可以在 Bean 实例化、依赖注入和 AOP 等操作之后对 Bean 进行修改。通过实现这两个接口,可以自定义容器的初始化和销毁操作

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值