这块的笔记主要是看张孝祥老师的java高新技术进阶课程和黎活明老师spring课程,这是真正让我拔高的过程,知道了spring的底层原理,老张自己写过一个简单的spring,用的注解,老黎也讲了一遍,从最深处开始load起,后来我自己也写了一个简单的spirngmvc框架,都是在他们的基础上做的,自定义注解,反射,工厂,IOC等等东西都是从这里来的。不过当时一直没理解,就反复的跟着视频敲,然后回过头来看看,等到黑马培训,栋哥再给我们过一遍基本就完事了,也就是那个时候开始写的spring框架,及研究struts2,但是这么久了就是没用struts2,好桑心,毕竟第一个我扒源码扒的那么仔细的框架实际开发中都没用过。。。不多说直接上原始笔记。
#
scope属性默认值是singleton即单例;默认情况下,在Spring容器初始化就已经将指定
在beans.xml文件中的内容所要创建的bean对象初始化;bean对象在Spring容器初始化就
创建好了;
可以指定prototype属性(scope),使得每次
获取的bean对象都是全新的,不在是单例的对象;同时默认是延迟加载的,也就是说,只有使用getBean方法进行获取时才创建,当然这是可以指定的,即延迟加载的属性;
即单例设计模式和原型设计模式;
这对于struts2中的action配置需要注意,因为struts2解决线程安全问题的原理就是使用prototype方式创建action,即对
每个不同的请求都分配一个全新的action;因此需要用scope注解生命指定其方式为prototype;
而这次就是调用getBean方法才创建所需的bean;
但是这都是可以在配置文件中指定的!根据实际需要去配置;
控制反转:所谓控制反转,就是对象的创建以及维护是由外部容器实现的,以前我们在类中要使用其他类的方法,需要在我们本类中new其对象;
而采用控制反转时,这个对象的创建工作和维护就交给了Spring容器;有利于各层之间的解耦;
面向对象的第一大原则是:面向接口编程;
就是面向接口编程原则的体现;比如说我们在某个类中要使用其他类的对象来为自己服务;
从前我们都是在我们自己的类中创建我们要使用的类的对象;而现在我们只要在自己的类中定义
该类的接口对象的引用,并提供set,get方法(主要是set方法);然后放心大胆的去用;创建工作交给Spring容器;我们只要自己使用就行了
但是在Spring配置文件中进行属性的配置即可;
要在我们自己的类的配置项中加入这样一项内容;
这底层的原理是使用dom4j技术对xml配置文件进行解析,解析出相应的属性,如果需要注入属性的,就利用反射机制调用其set方法,对属性进行注值;
关键步骤:
1 创建引用,并提供set,get方法;
2 在配置文件中注入该属性及其对应的实现类;
3 在本类中使用;
其实向某个类中注入某个属性有两种方法:
其一是上面讲的配置ref选项;
其二是配置内部bean选项;但是这个bean只能供内部使用;外部无法访问;
注入int等基本数据类型及String类型的配置是这样的;
对属性的注入有两种方法,一种是自动的,一种是手动的!
手动的方式包括:
1:配置beans.xml文件;配置bean和property属性;还有一种就是使用构造器来注入,用的不是很多!
2:通过在成员或方法上手动加入注解来实现依赖注入;有两种方式一中是@Resource,他是JavaEE自带的注解;
采用名称和类型识别相结合,即先按名称查找,没找到则按类型查找;
另一种是Spring提供的@Authorwired;他是按类型来查找的;当然也可以通过添加属性配置实现按名称查找;
但是不管是哪一种方式其底层原理都是用的反射技术来实现的;
使用注解方式的注意事项:
1 必须要导入相关的注解包;
2 配置文件中要引入相应的schema约束文件;并打开context配置项;
3 可以在相应属性上配置,也可以在set方法上配置;即在其权限修饰符前加@Resource
或者@Autowired;表示对其使用注解方式注入值;
一般来说@Resource是javaEE自带的,而@Authorwired是Spring自带的;由于我们使用的是Spring来实现属性注入,因此最好使用@Autowired方式实现;
通过在classpath自动扫描方式把组件纳入spring容器中管理,需要有属性的set方法!!!
使用注解来实现将我们需要被Spring容器管理的bean交给Spring容器;
@Service用于标注业务层组件,@Controller用于标注控制层组件(如struts中的action);
@Repository用于标注数据库访问组件,即DAO组件,
@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
@Scope("prototype");指定bean对象产生的方式,是单例还是其他!
@PostConstrut在某个方法上标注,表示将该方法指定为初始化方法!
同理@PreDestroy标注为摧毁方法!!!
AOP:面向切面编程(aspect oriented programming);
使用代理类Proxy可以实现;该类有个静态方法 public static Object
newProxyInstance(ClassLoader loader,
深入理解Spring框架与依赖注入技术
本文详细探讨了在Java高新技术进阶课程中学习到的Spring框架底层原理,包括单例与原型模式、控制反转、面向接口编程、依赖注入等核心概念。介绍了如何在配置文件中使用不同方式实现属性注入,并提供了使用注解如@Autowired和@Resource进行依赖注入的实例。此外,文章还涉及了Spring框架中常用的注解和新特性,如@Component、@PostConstruct和@PreDestroy,以及AOP面向切面编程的基本原理。
3万+

被折叠的 条评论
为什么被折叠?



