实现功能 1.我们看到@ComponentScan注解一个开始定义就是需要支持,扫描多个包,将多个包的类名获取到.现在就实现这个功能. 实现思路 根据传入的字符串数组,获得多个包下的类全限制名. 实现步骤 --基于之前的代码-- 1.在PackageUtils.增加一个扫描多个包的方法 /** * 支持同时扫描多个包的路径下的类全限制名以及其子包的所有类的全限制名 包名直接使用逗号分割 * * @param packageNames:传入多个包名 * @param isRecursion:是否扫…
实现功能 以上的代码我们发现.我们都是将@ComponentScan扫描的路径下的所有类都加载到容器中的. 而实际需求,我们并不希望所有的类都创建对象,而是加了组件注解@Controller,@Service,@Repository,@Component的类才创建对象 而不加这些标识的类不需要创建对象. 所谓本章就是实现通过组件注解限制哪些类是可以创建对象的,哪些是不可以的. 实现思路 根据获得的类全限制名,获得它的Class对象.通过Class对象判断类的声明上是否有组件注解.有就创建对象,没…
功能说明 该步骤实现的功能包括: 1. 启动程序时,将@ComponentScan加载的类,创建对象并放在容器里面. 2. 通过ApplicatoinContext的getBean()方法获得容器里面的对象. (放在下一篇文实现) 实现步骤 1.定义一个扫描注解@ComponentScan package ioc.core.annotation; import java.lang.annotation.Documented; import java.lang.annotation.Element…
实现功能 --前面实现的代码-- 默认的对象名就类名.不符合Java的命名规范.我们希望默认的对象名首字母小写. 实现思路 创建一个命名规则的帮助类.实现将对大写开头的对象名修改为小写开头. 实现步骤 1.创建一个命名规则帮助类 package ioc.core.utils; /** * 创建命名规则帮助类 * * @author ranger * */ public class NamingUtils { /** * 将类名修改为对象名,首字母小写 * * @param className *…
实现的功能 1. 启动程序时,将@ComponentScan加载的类,创建对象并放在容器里面.(查看上一篇文) 2. 通过ApplicatoinContext的getBean()方法获得容器里面的对象. (1)使用getBean("对象名")返回的对象都Object类型 (2)使用getBean("对象名",<对象类型>),返回指定类型的对象 思路说明 在上面的代码的基础上,在AbstractApplicationContext抽象类实现getBean的…
Ioc内核要解决的问题 1.被调用方,在程序启动时就要创建好对象,放在一个容器里面. 2.调用方使用一个接口或类的引用(不用使用new),就可以创建获得对象. 解决这个两个问题的思路 1.定义一个对象容器,用于存储所有的创建的对象. 2.给启动程序时就需要创建对象并放在容器里面的类一个标识,我称为组件注解. 根据三层架构的定义:组件注解分别为 @Controller:表示层的类 @Service:服务层的类 @Repository:持久层的类 @Component:三层架构以外的类 3.定义一个…
阅前提醒 全文较长,建议沉下心来慢慢阅读,最好是打开Idea,点开Spring源码,跟着下文一步一步阅读,更加便于理解.由于笔者水平优先,编写时间仓促,文中难免会出现一些错误或者不准确的地方,恳请各位大佬在评论区留言指正.建议在阅读本篇文章之前,先看下我的另一篇博文 一图助你搞明白Spring应用上下文初始化流程! 从而对Spring应用上下文初始化过程有个大概了解. 如果各位小伙伴由于笔者描述不清,而不理解的地方也欢迎在评论区留言哦!该系列文章共有三篇,敬请期待~ ~ ~ 正文 一切的开始要从…
先看看 IoC百度百科 优化过程 namespace Test { class Program { static void Main(string[] args) { //场景 某公司客服要回访一些客户 //刚开始 回访的方式只有 打电话 //简单的实现 CustomerService1 cs1 = new CustomerService1(); cs1.Call(); } } public class CustomerService1 { public string Call() { retu…
.container { margin-right: auto; margin-left: auto; padding-left: 15px; padding-right: 15px } .container::before,.container::after { content: " "; display: table } .container::after { clear: both } .container::before,.container::after { content:…
思考: 1. 对象创建创建能否写死? 2. 对象创建细节 对象数量 action  多个   [维护成员变量] service 一个   [不需要维护公共变量] dao     一个   [不需要维护公共变量] 创建时间 action    访问时候创建 service   启动时候创建 dao       启动时候创建 3. 对象的依赖关系 action 依赖 service service依赖 dao =============================================…