Spring主要核心
Spring主要核心是:
(1).控制反转(IOC):以前传统的java开发模式中,当需要一个对象时我们,我们会自己使用new或者getInstance等直接或者间接调用构造方法创建一个对象,而在Spring开发模式中,Spring容器使用了工厂模式为我们创建了所需要的对象,我们使用时不需要自己去创建,直接调用Spring为我们提供的对象即可,这就是控制反转的思想。实例化一个java对象有三种方式:使用类构造器,使用静态工厂方法,使用实例工厂方法,当使用spring时我们就不需要关心通过何种方式实例化一个对象,spring通过控制反转机制自动为我们实例化一个对象。
(2).依赖注入(DI): Spring使用Java Bean对象的Set方法或者带参数的构造方法为我们在创建所需对象时将其属性自动设置所需要的值的过程就是依赖注入的基本思想。
(3).面向切面编程(AOP):在面向对象编程(OOP)思想中,我们将事物纵向抽象成一个个的对象。而在面向切面编程中,我们将一个个对象某些类似的方面横向抽象成一个切面,对这个切面进行一些如权限验证,事物管理,记录日志等公用操作处理的过程就是面向切面编程的思想。
spring依赖注入3种方式:
(1).使用构造器注入:
(2).使用属性的setter注入:
(3).使用Field字段注入方式,该方式是spring2.5以后提供的基于java 注解(annotation)方式的注入,就是在java中的字段上或者setter方法上通过使用注解方式进行spring的依赖注入。
java注解
Java注解(Annotation)是通过在java源文件上添加标记字段,然后通过反射的反射在编译或者运行时获取这些标记字段以及其标记目标,然后进行相应处理的方法
spring使用注解方式配置 :1 加入spring依赖jar包 common-annotation.jar 2,添加命名空间 3 在配置文件中注册注解处理器
Spring的自动装配: 自动装配的是指不用手动显式配置java Bean之间依赖关系,而是让spring依据某种规则自动将合适的对象注入到目标对象的过程。Spring中常用@Autowire和@Resource来进行自动装配。
(1).@Autowire:默认是按照对象的数据类型进行自动装配的,如
@Autowire
private UserDao userDao;
spring框架在运行时会自动将类型为UserDao的对象注入进来。
(2).@Resource:默认是按照名称或者Id进行自动装配的,只有当找不到匹配的名称或者Id时才按类型进行装配,如:
@Resource(name=”userDao”)
private UsreDao userDao;
Spring的自动扫描: 我们使用基于注解的spring配置方式后,spring的配置文件中只需要注册注解处理器,不用显式地配置Bean,当spring在运行时会自动扫描根据给定的条件下类路径中的所有bean,根据注解将它们注入和装配起来并进行初始化的过程。
java动态代理
Spring的面向切面编程(AOP)底层实现原理是动态代理
(1).java的针对接口动态代理: Java中的动态代理只能针对接口进行动态代理,因此,目标对象必须实现接口,代理对象要实现目标对象的所有接口
动态代理必须实现InvocationHandler接口,同时实现以下方法: [java] view plain copy Object invoke(Objectm代理实例,Method代理实例上调用的接口方法的Method 实例,Object[] 传入代理实例上方法调用的参数值的对象数组);
(2).cglib针对普通java类动态代理: cglib创建动态代理时,不要求目标类必须实现接口,其工作流程如下: a.动态代理类编写:、 b.实现MethodInterceptor接口:
IOC容器
BeanFactory Spring IoC容器的基本功能规范,是Spring IoC容器所应遵守的最底层和最基本的编程规范。
ApplicationContext接口是一个BeanFactory基础上封装了更多功能的,Spring中最为常用的IoC容器,其包含两个子接口:ConfigurableApplicationContext、WebApplicationContext。
(2).ApplicationContext的特性: ApplicationContext是Spring提供的一个高级的IoC容器,它除了能够提供IoC容器的基本功能外,还为用户提供了以下的附加服务: a.支持不同的信息源: ApplicationContext扩展了MessageSource接口,可以支持国际化的实现。 b.访问资源: ApplicationContext继承了DefaultResourceLoader的子类,通过ResourceLoader和Resource的支持,ApplicationContext可以加载不同地方的Bean定义资源文件,尤其可以从不同IO途径获取Bean定义信息。可以使用户程序灵活地定义Bean定义信息。 c.支持应用事件: ApplicationContext继承了ApplicationEventPublisher接口,在程序上下文中引入了事件机制,这些事件和Bean生命周期的结合为Bean的过来提供了便利。