目录
一.如何进行注册
二、如何进行注入
三、扫描+注解的原理 反射+文件操作
四、什么是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对象,解决方法与第二个相同: