直接上代码,代码中有注释
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();
}
}