1.IOC/DI:对象控制权的转移,从程序代码本身转移到了外部容器。
通常由调用者来创建被调用者的实例,在Spring里,创建被调用者的工作不再由调用者来完成,这叫做控制反转,依赖注入(Dependency injection)创建被调用者的工作由 Spring容器完成,然后注入调用者,因此也称依赖注入。控制反转和依赖注入是同一个概念。
常用依赖注入:
@Autowire默认按照类型装配,默认情况下它要求依赖对象必须存在如果允许为null,可以设置它required属性为false,如果我们想使用按照名称装配,可以结合@Qualifier注解一起使用;
@Resource默认按照名称装配,当找不到与名称匹配的bean才会按照类型装配,可以通过name属性指定,如果没有指定name属性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找依赖对象.
注意:如果没有指定name属性,并且按照默认的名称仍然找不到依赖的对象时候,会回退到按照类型装配,但一旦指定了name属性,就只能按照名称装配了----建议使用@Resource。
2.AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向方面编程。将通用需求功能从不相关类之中分离出来;同时,能够使得很多类共享一个行为,一旦行为发生变化,不必修改很多类,只要修改这个行为就可以。AOP就是这种实现分散关注的编程方法,它将“关注”封装在“方面”中
aop:将软件系统分为核心关注点和横切关注点,核心关注点主要处理的是业务逻辑,横切关注点是一般与业务逻辑无关,但他们经常发生在核心关注点的周围并且都是相似的,如日志处理,事物,安全,异常处理等,再说下具体的权限控制
aop代理由ioc容器负责生成管理,依赖关系也是,主要就是定义切入点,定义增强处理,
例如:自定义注解实现权限控制
1)自定义一个注解PrivilegeInfo,使用这个注解为service层中的方法进行权限配
2) 编写一个注解解析器AnnotationParse。解析注解@PrivilegeInfo(name=” *”)(注解解析器应该把@PrivilegeInfo中的name属性值解析出来)
3)在AOP中根据PrivilegeInfo注解的值,判断用户是否拥有访问目标方法的权限,有则访问目标,没有则给 出提示
关键技术:自定义注解+注解解析+封装需要的权限信息如满足的条件+Spring AOP(编写切面,配置哪些类需要代理)
主要步骤:编写一个切面,在配置切入点
如下图:

OOP是关注将需求功能划分为不同的并且相对独立,封装良好的类,并让它们有着属于自己的行为,依靠继承和多态等来定义彼此的关系;AOP是希望能够将通用需求功能从不相关的类当中分离出来,能够使得很多类共享一个行为,一旦发生变化,不必修改很多类,而只需要修改这个行为即可。AOP是使用切面(aspect)将横切关注点模块化,OOP是使用类将状态和行为模块化。在OOP的世界中,程序都是通过类和接口组织的,使用它们实现程序的核心业务逻辑是十分合适。但是对于实现横切关注点(跨越应用程序多个模块的功能需求)则十分吃力,比如日志记录,验证。
spring的声明式事务管理也是aop的一种体现,避免了频繁的开启和提交事务,回滚事务的操作
AOP相关图:







网友评论