Spring的註解使用

直接上代碼,代碼中有註釋

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();


    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章