1、什么是AOP?
AOP : 面向切面编程(Aspect Oriented Programming)技术,将一些重复的、和业务主逻辑不相关的功能性代码(日志记录、安全管理等)通过切面模块化地抽离出来进行封装,实现关注点分离、模块解耦,使得整个系统更易于维护管理。
常用注解:
注解 | 概念 |
---|---|
@Aspect | 切面是Pointcut 和Advice 的集合,一般单独作为一个类。Pointcut 和Advice 共同定义了关于切面的全部内容,它是什么时候,在何时和何处完成功能。 |
@Pointcut | 这是一组一个或多个切入点,在切点应该执行Advice 。您可以使用表达式或模式指定切入点,后面示例会提到。 |
@Advice | 这是在方法执行之前或之后采取的实际操作。这是在Spring AOP框架的程序执行期间调用的实际代码片段。 |
@Joinpoint | 这表示你的应用程序中可以插入AOP方面的一点。也可以说,这是应用程序中使用Spring AOP框架采取操作的实际位置。 |
@Pointcut | 这是一组一个或多个切入点,在切点应该执行Advice 。您可以使用表达式或模式指定切入点,后面示例会提到。 |
@Introduction | 引用允许我们向现有的类添加新的方法或者属性 |
@Weaving | 创建一个被增强对象的过程。这可以在编译时完成(例如使用AspectJ编译器),也可以在运行时完成。Spring和其他纯Java AOP框架一样,在运行时完成织入。 |
Advice通知注解:
注解 | 概念 |
---|---|
@Before() | 在方法被调用之前执行增强 |
@After() | 在方法被调用之后执行增强 |
@After-returning() | 在方法成功执行之后执行增强 |
@After-throwing() | 在方法抛出指定异常后执行增强 |
@Around() | 在方法调用的前后执行自定义的增强行为(最灵活的方式) |
2、什么是IOC?
IOC:控制反转(Inverse of Control)设计思路,取得对对象的控制权,把本应该由自己生成的对象改由让第三方容器托管,Spring中运用依赖注入DI来实现控制反转。
思路如下:
需求:现在有一个用户,为了实现某个查询,他想用mysql的形式查询。
传统的模式:程序员需要在service中new一个mysqldao出来,每多一个mapper就需要多new一次。
需求:现在用户觉得mysql不好,要改成oracle的形式查询。
传统的模式:程序员需要对每个dao层都做修改,new一个oracle对象。
IOC模式:将dao的创建交个第三方容器,通过setter/构造器/接口方式将mapper注入进对象。相当于将创建对象的职能控制反转给用户,用户需要什么实现方式就用什么方式实现。
常用注解:
用于创建对象
@Component:把资源让spring来管理。相当于xml中配置一个bean。value:指定bean的id,如果不指定value属性,默认bean的id是当前类的类名。首字母小写
@Controller:与@Component功能一样,一般用在表现层,便于分层
@Service:与@Component功能一样,一般用在业务层,便于分层
@Repository:与@Component功能一样,一般用于持久层,便于分层
用于注入数据
@Autowired:自动按照类型注入。当使用注解注入属性时,set方法可以省略。它只能注入其他bean类型。当有多个类型匹配时。使用要注入的对象变量名称作为bean的id,在spring容器中查找,找到了注入成功,找不到就报错。
@Qualifier:在自动按照类型注入的基础上,再按照Bean的id注入。它在给字段注入时不能单独使用,必须和@Autowire一起使用;但是给方法参数注入时,可以单独使用。value属性是指定Bean的id
@Resource:直接按照Bean的id注入。它也只能注入其他Bean类型。name属性是指定Bean的id
@Value:注入基本数据类型和String类型数据
用于改变作用范围
@Scope:指定Bean的作用范围。value属性指定范围的值--singleton单例,prototype多例,request作用与web应用的请求范围,session作用与web应用的会话范围,global-session作用与集群环境中会话范围