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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd "> -->
<!-- 定义UserDao对象,并指定id为userDao -->
<!-- <bean id="userDao" class="dao.impl.UserDao" />
定义UserBiz对象,并指定id为userBiz
<bean id="userBiz" class="biz.impl.UserBiz">
为userBiz的dao属性赋值,需要注意的是,这里要调用setDao()方法
<property name="dao">
引用id为userDao的对象为userBiz的dao属性赋值
<ref bean="userDao" />
<bean class="dao.impl.UserDao"></bean>
</property>
<property name="num">
<value>10</value>
</property>
</bean> --> <!-- <bean id="userDao1" class="com.demo.dao.UserDaoImpl"></bean>
<bean id="userService" class="service.UserServiceImpl">
<property name="userDao">
<ref bean="userDao1"/>
</property>
</bean> --> <!-- <bean id="userDao" class="com.demo.dao.UserDaoImpl"></bean>
<bean id="userService" class="service.UserServiceImpl">
<constructor-arg>
<ref bean ="userDao"/>
</constructor-arg>
</bean> -->
<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-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
<bean id="userService" class="com.aop.service.UserService"/>
<bean id="servicelogging" class="com.aop.service.ServiceLogging"/>
<aop:config>
<aop:pointcut expression="execution(public * com.aop.service.*.*Service(..))" id="servicePointcut"/>
<aop:aspect ref="servicelogging">
<aop:before method="before" pointcut-ref="servicePointcut"/>
<aop:after method="after" pointcut-ref="servicePointcut"/>
<aop:after-returning method="afterReturing" pointcut-ref="servicePointcut"/>
<aop:after-throwing method="afterThrowing" pointcut-ref="servicePointcut"/>
<aop:around method="around" pointcut-ref="servicePointcut"/>
</aop:aspect>
</aop:config>
</beans>

  User.java

package com.aop.entity;

public class User {
private int id;
private String username;
private String password;
private String email;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public User(int id, String username, String password, String email) {
super();
this.id = id;
this.username = username;
this.password = password;
this.email = email;
}
public User() {
super();
// TODO Auto-generated constructor stub
} }

  UserService

package com.aop.service;

import com.aop.entity.User;

public class UserService {

	/**
* @param args
*/
public void addUserService(User user){ System.out.println("业务方法被执行");
System.out.println(user.getUsername()); } }

  ServiceLogging

package com.aop.service;

import org.aspectj.lang.ProceedingJoinPoint;

public class ServiceLogging {
public void before(){
System.out.println("前置增强处理被执行");
}
public void after(){
System.out.println("最终增强处理被执行");
}
public void afterReturing(){
System.out.println("后置增强处理被执行");
}
public void afterThrowing(){
System.out.println("抛异常增强处理被执行");
} public void around(ProceedingJoinPoint pjp){
System.out.println("环绕前置增强处理被执行");
try {
pjp.proceed();
} catch (Throwable e) { e.printStackTrace();
}
System.out.println("环绕后置增强处理被执行");
}
}

  AopTest.java

package com.aop.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.aop.entity.User;
import com.aop.service.UserService; public class AopTest { /**
* @param args
*/
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService service=(UserService)ctx.getBean("userService");
User user = new User(10,"Tom","123456","504177380@qq.com");
service.addUserService(user); } }

  

Spring的本质是什么?

1.对象的创建

new  抽象类 工厂模式

工厂模式,以及其他模式像抽象工厂,

Builder模式提供的都是创建对象的方法。
这背后体现的都是“封装变化”的思想。

这些模式只是一些最佳实践而已: 起了一个名称、描述一下解决的问题、使用的范围和场景,在项目中还得自己去编码实现他们。

2.解除依赖

面向接口编程

3.Spring依赖注入

在Java 世界里,如果想描述各种逻辑关系, XML是不二之选

这个xml 挺容易理解的, 但是仅仅有它还不够, 还缺一个解析器(假设叫做XmlAppContext)来解析,处理这个文件,

基本过程是:0. 解析xml, 获取各种元素

      1. 通过Java反射把各个bean 的实例创建起来:

      2. 还是通过Java反射调用 的两个方法:

ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService service=(UserService)ctx.getBean("userService");

4.IOC VS DI

JAVAWEB 一一 Spirng(AOP面向切面)的更多相关文章

  1. AOP 面向切面编程, Attribute在项目中的应用

    一.AOP(面向切面编程)简介 在我们平时的开发中,我们一般都是面对对象编程,面向对象的特点是继承.多态和封装,我们的业务逻辑代码主要是写在这一个个的类中,但我们在实现业务的同时,难免也到多个重复的操 ...

  2. AOP面向切面编程的四种实现

     一.AOP(面向切面编程)的四种实现分别为最原始的经典AOP.代理工厂bean(ProxyFacteryBean)和默认自动代理DefaultAdvisorAutoProxyCreator以及Bea ...

  3. Javascript aop(面向切面编程)之around(环绕)

    Aop又叫面向切面编程,其中“通知”是切面的具体实现,分为before(前置通知).after(后置通知).around(环绕通知),用过spring的同学肯定对它非常熟悉,而在js中,AOP是一个被 ...

  4. Method Swizzling和AOP(面向切面编程)实践

    Method Swizzling和AOP(面向切面编程)实践 参考: http://www.cocoachina.com/ios/20150120/10959.html 上一篇介绍了 Objectiv ...

  5. [转] AOP面向切面编程

    AOP面向切面编程 AOP(Aspect-Oriented Programming,面向切面的编程),它是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术. ...

  6. C# AOP 面向切面编程之 调用拦截

    有时候我们需要在代码中对方法调用进行拦截,并修改参数和返回值,这种操作叫做AOP(面向切面编程) 不过需要注意的是,AOP的效率很慢,在需要高效率场合慎用. 以下是C#的AOP方法: 首先建立一个控制 ...

  7. 【原创】Android AOP面向切面编程AspectJ

    一.背景: 在项目开发中,对 App 客户端重构后,发现用于统计用户行为的友盟统计代码和用户行为日志记录代码分散在各业务模块中,比如在视频模块,要想实现对用户对监控点的实时预览和远程回放行为进行统计, ...

  8. 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之十 || AOP面向切面编程浅解析:简单日志记录 + 服务切面缓存

    代码已上传Github+Gitee,文末有地址 上回<从壹开始前后端分离[ .NET Core2.0 Api + Vue 2.0 + AOP + 分布式]框架之九 || 依赖注入IoC学习 + ...

  9. 论AOP面向切面编程思想

    原创: eleven 原文:https://mp.weixin.qq.com/s/8klfhCkagOxlF1R0qfZsgg [前言] AOP(Aspect-Oriented Programming ...

  10. 学习笔记: AOP面向切面编程和C#多种实现

    AOP:面向切面编程   编程思想 OOP:一切皆对象,对象交互组成功能,功能叠加组成模块,模块叠加组成系统      类--砖头     系统--房子      类--细胞     系统--人    ...

随机推荐

  1. Unix.Trojan.DDoS_XOR-1木马症状及清理办法

    父进程名称: crond 进程名称: bash 进程路径: /usr/bin/bash 进程id: 20,517 命令行参数: /bin/sh /etc/cron.hourly/cron.sh 事件说 ...

  2. php创建临时表

    $sql= "create temporary table yc_linshi ( img varchar(100) not null, openid varchar(50) not nul ...

  3. RxJava+Retrofit+OkHttp,一步一步封装网络框架;

    使用RxJava+Retrofit+OkHttp,首先在build.gradle添加: compile 'com.squareup.okhttp3:okhttp:3.8.1' compile 'com ...

  4. Ddr2,ddr3,ddr4内存条的读写速率

    理论极限值是可以计算的:1333MHz * 64bit(单通道,双通道则128bit) / 8(位到字节单位转换) = 10.664GB/s.这只是理论,实际发挥还要看内存控制器,实际上1333单条跑 ...

  5. 前端基础-JavaScript

    转载地址:http://www.cnblogs.com/yuanchenqi/articles/6893904.html 一.Javascript结构   ECMAScript  ECMAScript ...

  6. 安装Thinkphp5

    Thinkphp完全开发手册地址:https://www.kancloud.cn/manual/thinkphp5/118006 1.安装扩展mbstring扩展:sudo apt-get insta ...

  7. log4js 2.X版本配置详解

    const log4js = require('log4js'); log4js.configure({ appenders: { cheese: { type: 'file', filename: ...

  8. JVM总结-垃圾回收

    Java 虚拟机的自动内存管理,将原本需要由开发人员手动回收的内存,交给垃圾回收器来自动回收.不过既然是自动机制,肯定没法做到像手动回收那般精准高效 [1] ,而且还会带来不少与垃圾回收实现相关的问题 ...

  9. 微信小程序:block的隐藏

    <block/> 并不是一个组件,它仅仅是一个包装元素,不会在页面中做任何渲染,只接受控制属性. 所以 hidden.display等通用隐藏元素的方法对block是无效的 想要隐藏blo ...

  10. SOA, EDA, 和 ESB

    SOA----面向服务架构,实际上强调的是软件的一种架构,一种支撑软件运行的相对稳定的结构,表面含义如此,其实SOA是一种通过服务整合来解决系统集成的一种思想.不是具体的技术,本质上是一种策略.思想. ...