spring注解

来源:互联网 发布:php程序员是什么意思 编辑:程序博客网 时间:2024/06/07 15:07

Spring框架的IOC之注解方式的快速入门

  1. 步骤一:导入注解开发所有需要的jar包

    • 引入IOC容器必须的6个jar包
    • 多引入一个:Spring框架的AOP的jar包,spring-aop的jar包
  2. 步骤二:创建对应的包结构,编写Java的类

    • UserService – 接口
    • UserServiceImpl – 具体的实现类
  3. 步骤三:在src的目录下,创建applicationContext.xml的配置文件,然后引入约束。注意:因为现在想使用注解的方式,那么引入的约束发生了变化

    • 需要引入context的约束,具体的约束如下
 <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"> <!-- bean definitions here -->        </beans>
  1. 步骤四:在applicationContext.xml配置文件中开启组件扫描

    • Spring的注解开发:组件扫描

    • 注意:可以采用如下配置
      这样是扫描com.itheima包下所有的内容

  2. 步骤五:在UserServiceImpl的实现类上添加注解

    • @Component(value=”userService”) – 相当于在XML的配置方式中
  3. 步骤六:编写测试代码
    public class SpringDemo1 {
    @Test
    public void run1(){
    ApplicationContext ac = new ClassPathXmlApplicationContext(“applicationContext.xml”);
    UserService us = (UserService) ac.getBean(“userService”);
    us.save();
    }
    }


  1. @Component:组件.(作用在类上)

  2. Spring中提供@Component的三个衍生注解:(功能目前来讲是一致的)

    • @Controller – 作用在WEB层
    • @Service – 作用在业务层
    • @Repository – 作用在持久层

    • 说明:这三个注解是为了让标注类本身的用途清晰,Spring在后续版本会对其增强

  3. 属性注入的注解(说明:使用注解注入的方式,可以不用提供set方法)

    • 如果是注入的普通类型,可以使用value注解

      • @Value – 用于注入普通类型
    • 如果注入的是对象类型,使用如下注解

      • @Autowired – 默认按类型进行自动装配
        • 如果想按名称注入
        • @Qualifier – 强制使用名称注入
    • @Resource – 相当于@Autowired和@Qualifier一起使用

      • 强调:Java提供的注解
      • 属性使用name属性

1.项目样式
这里写图片描述

2.配置xml文件 applicationContext.xml

<?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"> <!-- bean definitions here -->    <!-- 开启注解的扫描 -->    <context:component-scan base-package="com.demo01"/></beans>

3.写java方法

package com.demo01.dao;import java.util.logging.Logger;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Repository;import com.demo01.server.UserServerDao;//spring注解,这样就不要在文件里面配置了/** * 其实Spring中提供@Component的三个衍生注解:(功能目前来讲是一致的) *  * @Controller       -- 作用在WEB层    * @Service          -- 作用在业务层    * @Repository       -- 作用在持久层 * @author lenovo * */@Repository(value="userServiceImpl")public class UserDaoImpl implements UserDao {    //用于注入普通类型              @Value(value = "aaaa")    String name;    //默认按类型进行自动装配    @Autowired    public UserServerDao userServerDao;    private Logger log = Logger.getLogger("log");    @Override    public void addName() {        // TODO Auto-generated method stub        log.info("添加了一个名字");        log.info(name);    }    @Override    public void addYeat() {        // TODO Auto-generated method stub        log.info("添加一个年");        userServerDao.addServer();    }}
package com.demo01.server;import org.springframework.stereotype.Service;@Service(value="userServerImpl")public class UserServerImpl implements UserServerDao{    @Override    public void addServer() {        // TODO Auto-generated method stub        System.out.println("使用一个servere使用");    }}

Bean的作用范围和生命周期的注解

  1. Bean的作用范围注解

    • 注解为@Scope(value=”prototype”),作用在类上。值如下:
      • singleton – 单例,默认值
      • prototype – 多例
  2. Bean的生命周期的配置(了解)

    • 注解如下:
      • @PostConstruct – 相当于init-method
      • @PreDestroy – 相当于destroy-method

3.demo样式

package com.demo01.server;import javax.annotation.PostConstruct;import javax.annotation.PreDestroy;import org.springframework.context.annotation.Scope;import org.springframework.stereotype.Service;@Service(value="userServerImpl")@Scope(value = "singleton")public class UserServerImpl implements UserServerDao{    @PostConstruct    private void init() {        // TODO Auto-generated method stub        System.out.println("开始了。。。");    }    @PreDestroy    public void destroy(){        System.out.println("结束了。。。。。。。");    }    @Override    public void addServer() {        // TODO Auto-generated method stub        System.out.println("使用一个servere使用");    }}

spring注解test注解
1. 为了简化了JUnit的测试,使用Spring框架也可以整合测试
2. 具体步骤
* 要求:必须先有JUnit的环境(即已经导入了JUnit4的开发环境)!!

* 步骤一:在程序中引入:spring-test.jar* 步骤二:在具体的测试类上添加注解
  @RunWith(SpringJUnit4ClassRunner.class)        //其实和在web.xml中接入spring的很像        @ContextConfiguration("classpath:applicationContext.xml")        public class SpringDemo1 {            //这个是java中的注解,和spring的注解最大的区别是,他是'name'            @Resource(name="userService")            private UserService userService;            @Test            public void demo2(){                userService.save();            }        }

spring AOP 注入
使用 xml 配置方式
技术分析之AOP的相关术语

  1. Joinpoint(连接点) – 所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点
  2. Pointcut(切入点) – 所谓切入点是指我们要对哪些Joinpoint进行拦截的定义
  3. Advice(通知/增强) – 所谓通知是指拦截到Joinpoint之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)
  4. Introduction(引介) – 引介是一种特殊的通知在不修改类代码的前提下, Introduction可以在运行期为类动态地添加一些方法或Field
  5. Target(目标对象) – 代理的目标对象
  6. Weaving(织入) – 是指把增强应用到目标对象来创建新的代理对象的过程
  7. Proxy(代理) – 一个类被AOP织入增强后,就产生一个结果代理类
  8. Aspect(切面) – 是切入点和通知的结合,以后咱们自己来编写和配置的

技术分析之AspectJ的XML方式完成AOP的开发

  1. 步骤一:创建JavaWEB项目,引入具体的开发的jar包

    • 先引入Spring框架开发的基本开发包
    • 再引入Spring框架的AOP的开发包

      • spring的传统AOP的开发的包

        • spring-aop-4.2.4.RELEASE.jar
        • com.springsource.org.aopalliance-1.0.0.jar
      • aspectJ的开发包

        • com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
        • spring-aspects-4.2.4.RELEASE.jar
  2. 步骤二:创建Spring的配置文件,引入具体的AOP的schema约束
   <beans xmlns="http://www.springframework.org/schema/beans"           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"           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/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
  1. 步骤三:创建包结构,编写具体的接口和实现类
    • com.itheima.demo2
      • CustomerDao – 接口
      • CustomerDaoImpl – 实现类
  2. 步骤四:将目标类配置到Spring中

  3. 步骤五:定义切面类

public class MyAspectXml {        // 定义通知        public void log(){            System.out.println("记录日志...");        }    }
  1. 步骤六:在配置文件中定义切面类

  2. 步骤七:在配置文件中完成aop的配置

 <aop:config>        <!-- 引入切面类 -->        <aop:aspect ref="myAspectXml">            <!-- 定义通知类型:切面类的方法和切入点的表达式 -->            <aop:before method="log" pointcut="execution(public * com.itheima.demo3.CustomerDaoImpl.save(..))"/>        </aop:aspect>    </aop:config>
  1. 完成测试
  @RunWith(SpringJUnit4ClassRunner.class)    @ContextConfiguration("classpath:applicationContext.xml")    public class Demo3 {        @Resource(name="customerDao")        private CustomerDao customerDao;        @Test        public void run1(){            customerDao.save();            customerDao.update();            customerDao.delete();        }    }

使用注解的方法
技术分析之:Spring框架的AOP技术(注解方式)

  1. 步骤一:创建JavaWEB项目,引入具体的开发的jar包

    • 先引入Spring框架开发的基本开发包
    • 再引入Spring框架的AOP的开发包

      • spring的传统AOP的开发的包

        • spring-aop-4.2.4.RELEASE.jar
        • com.springsource.org.aopalliance-1.0.0.jar
      • aspectJ的开发包

        • com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
        • spring-aspects-4.2.4.RELEASE.jar
  2. 步骤二:创建Spring的配置文件,引入具体的AOP的schema约束

<beans xmlns="http://www.springframework.org/schema/beans"           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"           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/aop http://www.springframework.org/schema/aop/spring-aop.xsd">    </beans>
  1. 步骤三:创建包结构,编写具体的接口和实现类

    • com.itheima.demo1
      • CustomerDao – 接口
      • CustomerDaoImpl – 实现类
  2. 步骤四:将目标类配置到Spring中

     <bean id="customerDao" class="com.itheima.demo1.CustomerDaoImpl"/>
  1. 步骤五:定义切面类

    • 添加切面和通知的注解

      • @Aspect – 定义切面类的注解

      • 通知类型(注解的参数是切入点的表达式)

        • @Before – 前置通知
        • @AfterReturing – 后置通知
        • @Around – 环绕通知
        • @After – 最终通知
        • @AfterThrowing – 异常抛出通知
    • 具体的代码如下

 @Aspect        public class MyAspectAnno {            @Before(value="execution(public void com.itheima.demo1.CustomerDaoImpl.save())")            public void log(){                System.out.println("记录日志...");            }        }
  1. 步骤六:在配置文件中定义切面类
  <bean id="myAspectAnno" class="com.itheima.demo1.MyAspectAnno"/>
  1. 步骤七:在配置文件中开启自动代理
 <aop:aspectj-autoproxy/>
  1. 完成测试
   @RunWith(SpringJUnit4ClassRunner.class)    @ContextConfiguration("classpath:applicationContext.xml")    public class Demo1 {        @Resource(name="customerDao")        private CustomerDao customerDao;        @Test        public void run1(){            customerDao.save();            customerDao.update();        }    }

1.到如所有的包

这里写图片描述

  1. xml 文件配置
<?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"    xmlns:tx="http://www.springframework.org/schema/tx"    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    http://www.springframework.org/schema/tx     http://www.springframework.org/schema/tx/spring-tx.xsd">    <!-- 开启自动代理 aop代理扫描-->    <aop:aspectj-autoproxy/>    <!-- 开启注解的扫描 -->    <context:component-scan base-package="com"/>    <!--  这个不能删除,不然,aop没法扫描到这个切面 -->    <bean id="logUser" class="com.aop.demo2.log.LogUser"/></beans>

3.切面的配置

package com.aop.demo2.log;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.annotation.Pointcut;@Aspectpublic class LogUser {    @Before(value = "LogUser.fn()")    public void log(){        System.out.println("我要打印");    }    /**     * 自动定义切入点  @Pointcut     */    @Pointcut(value="execution(public * com.aop.demo2.dao.AopUserImpl.select())")    public void fn(){}}

1.项目中,demo2 是注解的方法
2.demo的地址https://gitee.com/yuhaifei/java-all-demo/tree/master/spring_demo
3.src/.. 文件夹下面有黑马老师的笔记非常感谢

原创粉丝点击