1、IOC注解

  1.1 IOC和DI的注解

   IOC:

      @Component:实现Bean组件的定义

      @Repository:用于标注DAO类,功能与@Component作用相当

      @Service:用于标注业务类

      @Controller:用于标注控制器

DI:

      @Resource(name="userService")默认ByName方式,如果name确实默认按照ByType方式注入

      @Autowired,默认ByType方式,如果出现同名类,则不能按照Type进行注入,需要使用@Qualifier 指明ID

  1.2 IOC注解实现添加用户案例

  (1)实体类

package cn.spring.ioc.entity;

import java.io.Serializable;

public class UserInfo implements Serializable {
private Integer user_id;
private String user_name; public Integer getUser_id() {
return user_id;
} public void setUser_id(Integer user_id) {
this.user_id = user_id;
} public String getUser_name() {
return user_name;
} public void setUser_name(String user_name) {
this.user_name = user_name;
}
}

  (2)ApplicationContext.xml

    (最好先去完成ApplicationContext配置文件,以免忘记)

<!--扫描注解:包扫描器-->
<context:component-scan base-package="cn.spring"></context:component-scan>

    (3)IUserInfoMapper接口

package cn.spring.ioc.mapper;

import cn.spring.ioc.entity.UserInfo;

public interface IUserInfoMapper {
public int addUser(UserInfo info);
}

  (4)IUserInfoMapperImpl接口实现类

package cn.spring.ioc.mapper.impl;

import cn.spring.ioc.entity.UserInfo;
import cn.spring.ioc.mapper.IUserInfoMapper;
import org.springframework.stereotype.Repository; /**
* dao层标识 @Repository
*/
@Repository
public class IUserInfoMapperImpl implements IUserInfoMapper { @Override
public int addUser(UserInfo info) {
System.out.println("添加成功!");
return 1;
}
}

  (5)IUserInfoService

package cn.spring.ioc.service;

import cn.spring.ioc.entity.UserInfo;

public interface IUserInfoService {
public int addUser(UserInfo info);
}

  (6)IUserInfoServiceImpl实现类

package cn.spring.ioc.service;

import cn.spring.ioc.entity.UserInfo;

public interface IUserInfoService {
public int addUser(UserInfo info);
}

  (7)测试类

package cn.spring;

import cn.spring.ioc.entity.UserInfo;
import cn.spring.ioc.service.IUserInfoService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class IocTest {
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml"); IUserInfoService bean = (IUserInfoService)context.getBean("iUserInfoServiceImpl");
bean.addUser(new UserInfo());
}
}

  (8)控制台

      

2、AOP注解

  2.1 实现AOP的注解

    @Aspect 声明切面

    @Ponitcut 声明公共的切点表达式

    @Before 前置增强

    @AfterReturning 后置增强

    @Around 环绕增强

    @AfterThrowing 异常抛出增强

    @After 最终增强

  2.2  AOP注解实现前后置增强

  (1)IdoSomeService层

package cn.spring.aop;

import org.springframework.stereotype.Service;

/**
* 业务类
*/
@Service("idoSomeService")
public class IdoSomeService {
public void doSome(){
System.out.println("业务类当中的doSome方法");
}
public void say(){
System.out.println("业务类当中的say方法");
}
}

  (2)MyAdvice增强类

package cn.spring.aop;

import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component; /**
* 增强类,把增强类注入到Spring容器
*/
@Aspect
@Component
public class MyAdvice {
//定义一个空方法,为了可以应用切点表达式
@Pointcut("execution(* *..aop.*.*(..))")
public void pointCut(){} //自定义增强方法
@Before("pointCut()")
public void before(){
System.out.println("=====前置增强=====");
} //自定义增强方法
@AfterReturning("pointCut()")
public void after(){
System.out.println("=====后置增强=====");
}
}

  (3)applicationContext.xml配置文件

<!--扫描注解:包扫描器-->
<context:component-scan base-package="cn.spring"></context:component-scan> <!--开启AOP注解支持-->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

  (4)测试类

package cn.spring;

import cn.spring.aop.IdoSomeService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class AopTest {
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
IdoSomeService idoSomeService = (IdoSomeService)context.getBean("idoSomeService");
idoSomeService.doSome();
idoSomeService.say();
}
}

      (5)控制台

   

  

Spring中注解方式实现IOC和AOP的更多相关文章

  1. 用通俗的语言解释 Spring 中的 DI 、IOC 和AOP概念

    DI 所谓依赖,从程序的角度看,就是比如A要调用B的方法,那么A就依赖于B,反正A要用到B,则A依赖于B.所谓倒置,你必须理解如果不倒置,会怎么着,因为A必须要有B,才可以调用B,如果不倒置,意思就是 ...

  2. (转)使用Spring的注解方式实现AOP入门

    http://blog.csdn.net/yerenyuan_pku/article/details/52865330 首先在Eclipse中新建一个普通的Java Project,名称为spring ...

  3. Spring 使用纯注解方式完成IoC

    目录 创建一个简单的Person类 使用xml方式配置Spring容器并获取bean的过程 创建xml配置文件 进行测试 使用纯注解方式配置Spring容器并获取bean的过程 创建spring配置类 ...

  4. (转)使用Spring的注解方式实现AOP的细节

    http://blog.csdn.net/yerenyuan_pku/article/details/52879669 前面我们已经入门使用Spring的注解方式实现AOP了,现在我们再来学习使用Sp ...

  5. 【Spring】XML方式实现(无参构造 有参构造)和注解方式实现 IoC

    文章目录 Spring IoC的实现方式 XML方式实现 通过无参构造方法来创建 1.编写一个User实体类 2.编写我们的spring文件 3.测试类 UserTest.java 4.测试结果 通过 ...

  6. Spring 框架的概述以及Spring中基于XML的IOC配置

    Spring 框架的概述以及Spring中基于XML的IOC配置 一.简介 Spring的两大核心:IOC(DI)与AOP,IOC是反转控制,DI依赖注入 特点:轻量级.依赖注入.面向切面编程.容器. ...

  7. 【SSH系列】spring中为什么要使用IOC

    开篇前言 在前面的博文中,小编主要简单的介绍了spring的入门知识,随着学习的深入,我们知道spring最核心的两大技术,IOC和AOP,这两个技术也是spring最耀眼的地方,在后续的博文中小编将 ...

  8. mybatis源码学习--spring+mybatis注解方式为什么mybatis的dao接口不需要实现类

    相信大家在刚开始学习mybatis注解方式,或者spring+mybatis注解方式的时候,一定会有一个疑问,为什么mybatis的dao接口只需要一个接口,不需要实现类,就可以正常使用,笔者最开始的 ...

  9. spring中注解式事务不生效的问题

    常用的解决方法可以百度,我针对我的问题描述一下 Mysql中InnoDB引擎才支持事务, MyISAM不支持事务. 当你尝试了各种方法解决spring中注解式事务不生效时, 一定要查看一下数据库中表的 ...

随机推荐

  1. IDEA编译报错Error:java: Compilation failed: internal java compiler error

    根据报错可以知道是编译某个模块报错, 接下来就是检查这个模块的编译版本 解决办法很简单:File-->Setting...-->Build,Execution,Deployment--&g ...

  2. docker alphine 设置系统日期

    设置时区为上海 RUN apk add tzdata && cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && ...

  3. 桶排序(C语言)

    #include <stdio.h> int main(void) { int arr[5]={2,5,1,3,3}; //定义需要排序的数组 int res[6]={0}; //初始化& ...

  4. avd manger创建的虚拟机启动不起来,或者启动起来后黑屏

    最近鼓捣安卓虚拟机,整的都差点重装系统,刚开始下载了genymotion_vbox,装完以后要在vbox中导入一个虚拟机,结果我导入完,虚拟机怎么也启动不了,然后各种找办法无果,最后重启电脑发现电脑也 ...

  5. 2019-2020-1 20199305《Linux内核原理与分析》第八周作业

    可执行程序的工作原理 (一)ELF目标文件 (1)什么是ELF? 这里先提一个常见的名词"目标文件",是指编译器生成的文件.ELF(Executable and Linkable ...

  6. [考试反思]1110csp-s模拟测试109:细节

    细节...决定成败 T2数组开小,T3long long没开够. 而且其实不止这样,考试结束前15分钟发现了好多低错: T3双向边没开2倍.dfs没递归调用.T2为了调试bitset开20没改(后来改 ...

  7. 安卓投屏助手(ARDC)最新版

    安卓投屏助手(B1493) 1.兼容Android 10: 2.增加灭屏投屏功能: 3.增加显示鼠标位置功能; 4.增加了虚拟NaviBar功能: 5.捐赠界面增加QQ支付,移除Paypal,感谢大家 ...

  8. C语言程序设计100例之(23):数列求和

    例23  数列求和 问题描述 已知某数列前两项为2和3,其后继项根据前面最后两项的乘积,按下列规则生成: ① 若乘积为一位数,则该乘积即为数列的后继项: ② 若乘积为二位数,则该乘积的十位上的数字和个 ...

  9. Linux查看CPU和内存情况

    本文简单介绍在Linux上查看CPU和内存情况和一款系统资源查看工具htop. 查看CPU情况 以下是个人工作会经常使用到的服务器的信息. 查看所有CPU信息 可以通过如下命令查看所有CPU信息: # ...

  10. IT兄弟连 HTML5教程 HTML5文字版面和编辑标签 使用HTML表格

    表格在网站中应用得非常广泛,使用它可以方便.灵活地排版,很多动态大型网站也都是借助表格排版的,但现在都使用DIV+CSS进行页面布局.表格可以把相互关联的信息元素集中定位,使浏览页面的人一目了然.在H ...