直接上代碼,代碼中有註釋
AspectJ.java
package com.wemew.wmgame.spring_mybatis.config;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
/**
* 配置切面
* @author lh
* @version 1.0
* @date 2020-04-16 18:28
*/
@Component
@Aspect
public class AspectJ {
/**
* * 前面代表任意的訪問權限
* 第一個 * 代表:任意的返回類型
* execution 可以定位到包 、類 、方法、返回類型
* within 只能定位到類
*/
@Pointcut("execution(* com.wemew.wmgame.spring_mybatis.dao.*.*())")
public void pintCutExecution(){
}
/*@Before("pintCutExecution()")
public void beforeExecution(){
System.out.println("before");
}*/
/*@Pointcut("within(com.wemew.wmgame.spring_mybatis.dao.*)")
public void pintCut(){
}*/
/*
同時滿足pintCut() 但是不滿足pintCutExecution()
@Before("pintCut() && !pintCutExecution()")
public void before(){
System.out.println("before");
}*/
/**
* this是代表jdk動態代理
*/
/*@Pointcut("this(com.wemew.wmgame.spring_mybatis.dao.IndexDaoImpl)")
public void pintCut(){
}*/
@Pointcut("target(com.wemew.wmgame.spring_mybatis.dao.IndexDaoImpl)")
public void pintCut(){
}
@Before("pintCut()")
public void before(){
System.out.println("before");
}
}
Entity.java
package com.wemew.wmgame.spring_mybatis.config;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 自定義註解
* @author lh
* @version 1.0
* @date 2020-04-16 17:35
*/
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface Entity {
String value() default "";
}
SpringConfig.java
package com.wemew.wmgame.spring_mybatis.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import javax.sql.DataSource;
/**
* @author lh
* @version 1.0
* @date 2020-04-15 16:41
*/
@Configuration
@ComponentScan("com.wemew.wmgame.spring_mybatis")
@EnableAspectJAutoProxy
public class SpringConfig {
private String url = "jdbc:mysql://127.0.0.1:3306/weixin?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";
private String username = "root";
private String password = "root";
private String driverClassName = "com.mysql.jdbc.Driver";
@Bean
public SqlSessionFactory sqlSessionFactory(SqlSessionFactoryBean factoryBean) throws Exception {
factoryBean.setDataSource(dataSource());
return factoryBean.getObject();
}
@Bean
public SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
return sqlSessionFactoryBean;
}
@Bean
public DataSource dataSource() throws Exception {
DruidDataSource data = null;
data = new DruidDataSource();
data.setUrl(this.url);
data.setUsername(this.username);
data.setPassword(password);
data.setDriverClassName(driverClassName);
return data;
}
}
IndexDao.java
package com.wemew.wmgame.spring_mybatis.dao;
/**
* @author lh
* @version 1.0
* @date 2020-04-15 16:36
*/
public interface IndexDao {
public void test();
}
IndexDaoImpl.java
package com.wemew.wmgame.spring_mybatis.dao;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
/**
* @author lh
* @version 1.0
* @date 2020-04-15 16:36
*/
@Component
@Primary
public class IndexDaoImpl implements IndexDao{
@Override
public void test() {
System.out.println("IndexDaoImpl---test");
}
public void init(){
System.out.println("IndexDaoImpl init");
}
}
ConfigUtil.java
package com.wemew.wmgame.spring_mybatis.util;
import com.wemew.wmgame.spring_mybatis.config.Entity;
import javax.swing.plaf.metal.OceanTheme;
/**
* @author lh
* @version 1.0
* @date 2020-04-16 17:34
*/
public class ConfigUtil {
public static void printSql(Object object){
Class<?> aClass = object.getClass();
if(aClass.isAnnotationPresent(Entity.class)){
Entity annotation = aClass.getAnnotation(Entity.class);
String value = annotation.value();
System.out.println("value=="+value);
}
}
}
package com.wemew.wmgame.spring_mybatis;
import com.wemew.wmgame.spring_mybatis.config.SpringConfig;
import com.wemew.wmgame.spring_mybatis.dao.IndexDao;
import com.wemew.wmgame.spring_mybatis.dao.IndexDaoImpl;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/**
* @author lh
* @version 1.0
* @date 2020-04-15 17:20
*/
public class Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext annotationConfigApplicationContext =
new AnnotationConfigApplicationContext(SpringConfig.class);
/*@EnableAspectJAutoProxy(proxyTargetClass = false)
IndexDao bean = annotationConfigApplicationContext.getBean(IndexDaoImpl.class);
bean.test();
上述的代碼是會報錯的
No qualifying bean of type 'com.wemew.wmgame.spring_mybatis.dao.IndexDaoImpl' available
因爲這個時候類型是proxy或者接口類
*/
/*@EnableAspectJAutoProxy(proxyTargetClass = true)
IndexDao bean = (IndexDao) annotationConfigApplicationContext.getBean(IndexDaoImpl.class);
System.out.println(bean instanceof IndexDao);*/
IndexDao bean = (IndexDao) annotationConfigApplicationContext.getBean(IndexDao.class);
bean.test();
}
}