目录
6-1 java config-对象实例化
使用java代码来替代传统的xml文件
使用java类来替代原有的xml文件
创建演示用类
分别创建 dao service controller
UserService依赖于UserDao
controller依赖于service
将这三个类在ioc容器初始化的过程中完成对象的创建以及关联
因为不需要使用xml所以我们创建一个新的类config
如何在ioc容器中放入bean呢?这里我们定义一些方法
用new关键字完成对象的创建工作,为什么还要new 不要不他当成工程的一部分,把他当成配置文件
创建应用程序的入口
创建的实际实现类不一样了,基于注解配置的应用程序上下文,传入的是config这个类
打印容器中的对象
控制台中包含了两个重要对象,第一个是config,userDao这个beanId本质就是我们刚才利用bean所描述的方法名,后面的就是我们创建的对象
写好
重新运行
可以看到按照前后的顺序依次进行了实例化,并且利用方法名对bean进行了管理
6-2 JavaConfig-对象依赖注入
config如何完成对象的依赖注入呢?
如何完成Service依赖Dao Controller依赖Service
对于这个关联关系我们都是要依托于set方法,但是要set的对象却来自ioc容器
这里就需要设置bean所对应方法的参数了
依赖于dao我们只需要在参数中增加依赖对象
在执行UserService方法的时候发现要注入一个参数UserDao,而这个参数名和我们刚才bean的id是相同的,所以就会自动的把userDao创建的bean注入到这个参数中,然后执行下列代码
将注入的dao放到set方法中,就完成了userService中userDao属性的设置
同理
为了看清执行过程,增加一系列的sout
运行
注入类型是按类型注入还是名称注入呢?
如果是这种情况
就会报错
解决方法
就会为udao注入UserDao1
java config和注解并不冲突
为了能够良好的兼容其他注解java类增加
在ioc容器启动时不但去加载了当前的这些对象,还会去指定路径下扫描其他的组件类
在启动时也会对employeeDao实例化
如果想对其进行注入该怎么办呢?设置私有属性,增加setget
在方法上额外增加参数名,这样就会将employeeDao注入到参数中
好处:在编译阶段就会发现问题
坏处:毕竟是java的源代码,如果在发布以后,要调整必须要经过从新的编译