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. QT在linux下获取网络类型

    开发中遇到这样一个需求,需要判断当前网络的类型(wifi或者4G或者网线),在这里给大家一块分享下: 1.这里有一个linux指令:nmcli(大家自行百度即可) 2.nmcli device sta ...

  2. python创建多维字典方法

    python不直接创建多维字典,需要逐层判断不存在创建,存在追加: 例如: 不能直接 dictName['key1']['key2']['key3']['key4']['key5'] = ['123' ...

  3. December 07th, Week 49th Saturday, 2019

    Snowflakes are pretty patterns etched in water's dreams. 雪花,是水在梦中镌刻的美丽图案. From Anthony T.Hincks. Tod ...

  4. TestNG入门教程-12-Java代码执行testng.xml和失败后重跑

    前面我们都在IDEA上右键testng.xml文件来运行testng用例,这个在编写测试用例过程是 可以这么做,但是,如果测试用例写完了,也是这么做吗?有没有什么方法,例如自动化去实现.测试脚本维护后 ...

  5. python大作业二

    一.存入csv 上次爬取到了所需要的内容,但是没有存入到csv中,这次存入了csv文件中,代码如下: import requests from bs4 import BeautifulSoup imp ...

  6. java之JavaBean

    JavaBean是一种java语言编写而成的可重用组件. 所谓JavaBean,是指符合以下标准的java类: 类是公共的: 有一个无参的公共构造器: 有属性,属性一般是私有的,且有对应的set.ge ...

  7. Python 教你识别淘宝刷单,买到称心如意的商品

    发际线堪忧的小 Q,为了守住头发最后的尊严,深入分析了几十款防脱洗发水的评价,最后综合选了一款他认为最完美的防脱洗发水. 一星期后,他没察觉到任何变化. 一个月后,他用卷尺量了量,发际线竟然后退了 0 ...

  8. SpringBoot2.0 整合 Shiro 框架,实现用户权限管理

    本文源码:GitHub·点这里 || GitEE·点这里 一.Shiro简介 1.基础概念 Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理.作为一款安全 ...

  9. mybatis无效比较:invalid comparison:java.util.data and java.lang.string

    原因: 时间与空字符串比较是无效的,如果拿传入的时间类型参数与空字符串''进行对比则会引发invalid comparison:java.util.data and java.lang.string异 ...

  10. 使用session存储,购物车结算add_to_order.php(学生笔记)

    <?php session_start(); include_once("DB.class.php"); //接受并解析前端传过来的json,转换成数组. $goods_li ...