본문 바로가기

기존카테고리/Spring_basic1

XML 스키마 기반의 AOP 예제1


pom.xml 설정을 해야 한다. 하지 않은면 

import org.aspectj.lang.ProceedingJoinPoint; 이부분이 설정되지 않는다.


pom.xml


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <groupId>org.springframework.samples</groupId>

  <artifactId>springDemo3</artifactId>

  <version>0.0.1-SNAPSHOT</version>

  

  <properties>


<!-- Generic properties -->

<java.version>1.6</java.version>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>


<!-- Spring -->

<spring-framework.version>3.2.3.RELEASE</spring-framework.version>


<!-- Hibernate / JPA -->

<hibernate.version>4.2.1.Final</hibernate.version>


<!-- Logging -->

<logback.version>1.0.13</logback.version>

<slf4j.version>1.7.5</slf4j.version>


<!-- Test -->

<junit.version>4.11</junit.version>


</properties>

<dependencies>

<!-- Spring and Transactions -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context</artifactId>

<version>${spring-framework.version}</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-tx</artifactId>

<version>${spring-framework.version}</version>

</dependency>


<!-- Logging with SLF4J & LogBack -->

<dependency>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-api</artifactId>

<version>${slf4j.version}</version>

<scope>compile</scope>

</dependency>

<dependency>

<groupId>ch.qos.logback</groupId>

<artifactId>logback-classic</artifactId>

<version>${logback.version}</version>

<scope>runtime</scope>

</dependency>


<!-- Hibernate -->

<dependency>

<groupId>org.hibernate</groupId>

<artifactId>hibernate-entitymanager</artifactId>

<version>${hibernate.version}</version>

</dependency>


<!-- Test Artifacts -->

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-test</artifactId>

<version>${spring-framework.version}</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>${junit.version}</version>

<scope>test</scope>

</dependency>

<!-- AOP -->

<dependency>

<groupId>org.aspectj</groupId>

<artifactId>aspectjweaver</artifactId>

<version>1.7.4</version>

</dependency>


</dependencies>

</project>




Student.java


package com.test.aop;


public class Student {

private String name;

private int age;

private String hakbun;

private String grade;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getHakbun() {

return hakbun;

}

public void setHakbun(String hakbun) {

this.hakbun = hakbun;

}

public String getGrade() {

return grade;

}

public void setGrade(String grade) {

this.grade = grade;

}

public void getInfo(){

System.out.println("이름: "+getName());

System.out.println("나이: "+getAge());

System.out.println("학번: "+getHakbun());

System.out.println("학년: "+getGrade());

}

}



Staff.java


package com.test.aop;


public class Staff {

private String name;

private int age;

private String dept;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getDept() {

return dept;

}

public void setDept(String dept) {

this.dept = dept;

}

public void getInfo(){

System.out.println("이름: "+getName());

System.out.println("나이: "+getAge());

System.out.println("부서: "+getDept());

}

}



AdviceLog.java


package com.test.aop;


// pom.xml  파일 설정해야 import 할 수 있다.

import org.aspectj.lang.ProceedingJoinPoint;


public class AdviceLog {

public Object profile(ProceedingJoinPoint joinPoint) throws Throwable{

String signStr = joinPoint.getSignature().toShortString();

System.out.println(signStr+" is start!!");

long startTime = System.currentTimeMillis();

System.out.println("startTime: "+startTime);

try{

Object obj = joinPoint.proceed();

return obj;

} finally {

long endTime = System.currentTimeMillis();

System.out.println(signStr+" is finished!!");

System.out.println(signStr+" 경과시간: "+(endTime-startTime));

}

}

}



MainAop.java


package com.test.aop;


import org.springframework.context.support.AbstractApplicationContext;

import org.springframework.context.support.GenericXmlApplicationContext;


public class MainAop {

public static void main(String[] args){

AbstractApplicationContext ctx = new GenericXmlApplicationContext("classpath:aopEx1.xml");

Student student = ctx.getBean("student",Student.class);

student.getInfo();

Staff staff = ctx.getBean("staff",Staff.class);

staff.getInfo();

ctx.close();

}

}



aopEx1.xml

설정시 옆 탭 [Namespaces] 를 클릭해서 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: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-3.2.xsd">


<bean id="adviceLog" class="com.test.aop.AdviceLog" />

<aop:config>

<aop:aspect id="prof" ref="adviceLog">

<aop:pointcut expression="within(com.test.aop.*)" id="pcMethod"/>

<aop:around pointcut-ref="pcMethod" method="profile"/>

</aop:aspect>

</aop:config>

<bean id="student" class="com.test.aop.Student">

<property name="name" value="강호동" />

<property name="age" value="48" />

<property name="hakbun" value="20101201" />

<property name="grade" value="3학년"/>

</bean>

<bean id="staff" class="com.test.aop.Staff">

<property name="name" value="한효주"/>

<property name="age" value="32"/>

<property name="dept" value="관리과"/>

</bean>

</beans>






'기존카테고리 > Spring_basic1' 카테고리의 다른 글

IoC(Inversion of Control- 제어의 역전)  (0) 2017.07.22
빈의 범위(Scope)  (0) 2017.07.10
빈의 Life Cycle  (0) 2017.07.10
JAVA 속에 XML 코드 삽입  (0) 2017.07.10
XML 속에 JAVA 코드 삽입  (0) 2017.07.10