Spring学习之路(三)bean注解管理AOP操作

在类上面、方法上面、属性上面添加注解;并用bean来管理;

书写方法:@注解名称(属性名称=值)

第一步:导入jar包

  导入spring-aop.jar(spring注解包);

第二步:创建实体类(注解对象)

package com.aop;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

/**
 * value的值是自定义属性值
 * @Component(value="user")
 * @Controller    web层
 * @Service        业务层
 * @Repository    持久层
 *
 * (value="xx" 相当于      <bean id="xx" class="路径"></bean>
 * 四种注解方式,功能都相同
 */
@Component(value="user")
@Scope(value="prototype")    //创建是多例还是单例
public class AopUser {
    public void add() {
        System.out.println("add---------------");
    }
}

第三步:配置注解文件,引入约束

  核心约束:spring-beans.xsd

  注解约束:spring-context.xsd

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">
        <!-- 开启注解扫描 -->
        <!-- base-package :扫描到包里边的所有是否存在注解 -->
        <context:component-scan base-package="com.aop"></context:component-scan>
      <!--   <context:annotation-config></context:annotation-config> 扫描属性上的注解 -->
</beans>

第四步:测试

    @Test
    public void test() {
        //加载 spring 配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("bean2.xml");
//        得到注解对象 value的值
        AopUser user =  (AopUser) context.getBean("user");
        user.add();
    }

多例练习

package com.ioc;

import javax.annotation.Resource;

import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

@Service(value="user")
public class User {
    //@Autowired    两种方法都可以
    @Resource(name="userDao")//获取userDao注解名称
    private UserDao userDao;
    //得到dao对象,在使用注解方式时不需要set方法
    public void add() {
        System.out.println("user=====--------");
        userDao.add();
    }
}
//userDao类

@Component(value="userDao")
public class UserDao {
    public void add() {
        System.out.println("dao---------------");
    }
}

//测试;配置文件同上
@Test
public void test() {
    //加载 spring 配置文件
    ApplicationContext context = new ClassPathXmlApplicationContext("bean2.xml");
//    得到注解对象 value的值
    User user =  (User) context.getBean("user");
    user.add();
}

AOP操作

  1、导入jar包(看spring入门)

  2、创建实体类

package com.ioc;

import javax.annotation.Resource;

public class User {
    public void add() {
        System.out.println("user=====--------");
    }
}

// userDao类

import org.aspectj.lang.ProceedingJoinPoint;

public class UserDao {
    public void add() {
        System.out.println("前置增强---------------");
    }
    public void after(){
        System.out.println("后置增强------------");
    }

//    环绕通知
    public void arount(ProceedingJoinPoint proceedingJoinPoint) throws Throwable{
//        方法之前
        System.out.println("方法之前执行----------------");
//        执行增强的方法
        proceedingJoinPoint.proceed();
//        方法之后
        System.out.println("方法后执行----------------");
    }
}

  3、配置bean文件(导入aop约束)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
         http://www.springframework.org/schema/aop
         http://www.springframework.org/schema/aop/spring-aop.xsd">  

         <!-- 配置对象 -->
         <bean id="user" class="com.ioc.User"></bean>
         <bean id="userDao" class="com.ioc.UserDao"></bean>
         <!-- 配置aop操作 -->
         <aop:config>
             <!-- 配置切入点 -->
              <!-- execution(<访问修饰符>?<返回类型><方法名>(<参数>)<异常>) -->
             <aop:pointcut expression="execution(* com.ioc.User.*(..))" id="pointcut1"/>
             <!-- 配置切面 ;把增强放到方法上面-->
             <aop:aspect ref="userDao">
                 <!-- 配置增强类型;
                     method:设置 userdao中的增强的方法名
                     pointcut-ref:指向切入点ID值
                     就是先执行userDao里的方法,再执行user里的方法
                  -->
                 <aop:before method="add" pointcut-ref="pointcut1"/>
                 <!-- 后置增强 执行user的方法之后才会执行 after方法 -->
                 <aop:after-returning method="after" pointcut-ref="pointcut1"/>
                 <!-- 在执行user方法的前后开始执行其中的方法 -->
                 <aop:around method="arount" pointcut-ref="pointcut1"/>
             </aop:aspect>
         </aop:config>
</beans>

  4、测试

package com.junit;

import static org.junit.Assert.*;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.ioc.User;

public class Text {

    @Test
    public void test() {
        //加载 spring 配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("bean2.xml");
//        得到注解对象 value的值
        User user =  (User) context.getBean("user");
        user.add();
    }

}
时间: 2024-10-09 06:22:04

Spring学习之路(三)bean注解管理AOP操作的相关文章

Spring学习之路三——第一个Spring程序(体会IoC)

体会IoC:Spring通过一种称作控制反转(IoC)的技术促进了松耦合.当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象.你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它. 步骤如下: 1.建立web功能 2.导入jar包 3.配置applicationContext.xml 4.创建类 5.测试 具体代码如下 UserDao.java 1 package cn.itcast

Spring学习笔记(三)

Spring学习笔记(三) AOP 一.使用Annotation方式实现AOP.步骤: xml里加入配置:<aop:aspectj-autoproxy /> <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org

Jquery学习之路(三) 实现弹出层插件

弹出层的应用还是比较多的,登陆,一些同页面的操作,别人的总归是别人的,自己的才是自己的,所以一直以来想写个弹出层插件.不多废话,直接开始吧! 不想看可以在这里直接下载源码xsPop.zip 1:遮罩层 要弹出层,先要用一个遮罩层挡在下面的页面,此遮罩层是全屏的,页面滚动也要有,所以设置 position: fixed;还要有透明效果,下面是我定义的遮罩层css,取名mask .mask { position: fixed; width: 100%; height: 100%; backgroun

Spring学习(5)---Bean的定义及作用域的注解实现

Bean管理的注解实现 Classpath扫描与组件管理 类的自动检测与注册Bean <context:annotation-config/> @Component,@Repository,@Service,@Controller @Required @Autowired @Qualifier @Resource (一) Classpath扫描与组件管理 从Spring3.0开始,Spring javaConfig项目提供了很多特性,包括使用java而不是xml定义bean,比如:@Confi

Spring 学习之路(三)

前言:对于使用Spring框架的开发人员来说,我们主要做的主要有两件事情:①开发Bean;②配置Bean;而Spring帮我们做的就是根据配置文件来创建Bean实例,并调用Bean实例的方法来完成“依赖注入”,可以把Spring容器理解成一个大型工厂,Bean就是该工厂的产品,工厂(Spirng容器)里能生产出来什么样的产品(Bean),完全取决于我们在配置文件中的配置.我们那么今天我们就来说说关于Bean的故事... 容器中Bean的作用域 singleton 在整个Spring IoC 容器

Spring学习(六)bean装配详解之 【通过注解装配 Bean】【基础配置方式】

通过注解装配 Bean 1.前言 优势 1.可以减少 XML 的配置,当配置项多的时候,XML配置过多会导致项目臃肿难以维护 2.功能更加强大,既能实现 XML 的功能,也提供了自动装配的功能,采用了自动装配后,程序猿所需要做的决断就少了,更加有利于对程序的开发,这就是“约定优于配置”的开发原则 IOC发现Bean的两种方式 组件扫描:通过定义资源的方式,让 Spring IoC 容器扫描对应的包,从而把 bean 装配进来. 自动装配:通过注解定义,使得一些依赖关系可以通过注解完成. 2.使用

Spring 学习指南 第三章 bean的配置 (未完结)

第三章 bean 的配置 ? 在本章中,我们将介绍以下内容: bean 定义的继承: 如何解决 bean 类的构造函数的参数: 如何配置原始类型 (如 int .float 等) .集合类型(如 java.util.List.java.util.Map)等以及自定义类型 (如 Address ) 等的 bean 属性和构造函数参数: 如何通过使用 p 命名空间和 c 命名空间分别指定 bean 属性和构造参数来使用应用程序上下文 XML 文件变得简洁: Spring 的 FactoryBean

Spring学习总结(三)——Spring实现AOP的多种方式

AOP(Aspect Oriented Programming)面向切面编程,通过预编译方式和运行期动态代理实现程序功能的横向多模块统一控制的一种技术.AOP是OOP的补充,是Spring框架中的一个重要内容.利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率.AOP可以分为静态织入与动态织入,静态织入即在编译前将需织入内容写入目标模块中,这样成本非常高.动态织入则不需要改变目标模块.Spring框架实现了AOP,使用注解

spring学习——Ioc基础三(Ioc配置使用)

一.XML配置的结构  一般配置文件结构如下: <beans>       <import resource="resource1.xml"/>       <bean id="bean1"class=""></bean>       <bean id="bean2"class=""></bean>   <bean name=&q