Springboot 使用aop ,切controll层可以,切service层不行,请问是为什么 5C

Springboot 使用aop ,切controll层可以,切service层不行,找了好久不知道是为啥。

pom.xml:

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
<!--mybatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.1</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--end mybatis-->

        <!--通用mapper-->
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>1.1.5</version>
        </dependency>
        <!--&lt;!&ndash;pagehelper 分页插件&ndash;&gt;-->
        <!--<dependency>-->
            <!--<groupId>com.github.pagehelper</groupId>-->
            <!--<artifactId>pagehelper-spring-boot-starter</artifactId>-->
            <!--<version>1.2.3</version>-->
        <!--</dependency>-->

        <!--增加alibaba的连接池-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.19</version>
        </dependency>
        <!--end 增加连接池-->
<!--热部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
        <!--end 热部署-->
        <!--默认日志Logback-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.4</version>
        </dependency>
        <!--shiro依赖包-->

        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring</artifactId>
            <version>1.4.0</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.31</version>
        </dependency>

        <!--&lt;!&ndash;redis 的spring支持&ndash;&gt;-->
        <!--<dependency>-->
            <!--<groupId>org.springframework.boot</groupId>-->
            <!--<artifactId>spring-boot-starter-data-redis</artifactId>-->
        <!--</dependency>-->

        <!-- 整合redis -->
        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <version>2.0.1.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework.data/spring-data-redis -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
            <version>2.0.6.RELEASE</version>
        </dependency>
        <!-- redis客户端操作 -->
        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>

        <!--aop-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <!--<dependency>-->
            <!--<groupId>org.aspectj</groupId>-->
            <!--<artifactId>aspectjrt</artifactId>-->
            <!--<version>1.7.4</version>-->
        <!--</dependency>-->

    </dependencies>
aop

7个回答

service层


@Service
public class UserService extends BaseService {
    @Autowired
    UserMapper userMapper ;

    /**
     * 分页查询
     * @param user
     * @param page
     * @return
     */
    @RedisCacheEnable(invalidTime = 15)
    public Page<User> findPage(User user , Page<User> page){
        user.setPage(page);
        page.setResultList(userMapper.findList(user));
        return page;
    }
}

RedisCacheAspect


@Component
@Aspect
public class RedisCacheAspect {

    @Autowired
    private RedisUtils redisUtils;
    private Logger logger = LoggerFactory.getLogger(this.getClass());

//    @Pointcut("@annotation(com.lin.commons.config.cache.annotation.RedisCacheEnable)")
    @Pointcut("execution(* com.lin.modules.sys.services.UserService.*(..))")
    public void pointCut(){}

    @Before(value = "pointCut()")
    public void before(){
        System.out.println("===========================================>before");
    }

}

controller:

 @Autowired
    RedisUtils redisUtils;
    @Autowired
    UserService userService ;
    @RequestMapping("get")
    public User get(@Param("id") String id ){
        return userService.get(id);
    }

    /**
     * 获取
     * @return
     */
    @RequestMapping("findPage")
    public Page<User> findPage(){
        String key = "findPage";
        Page<User> page ;
        page = userService.findPage(new User(), new Page<>());
        return page;
    }
 @SpringBootApplication
@EnableTransactionManagement  // 启注解事务管理,等同于xml配置方式的 <tx:annotation-driven />
@MapperScan(basePackages = "com.lin", markerInterface = GlobalMapper.class)//在com.lin这里面的包进行扫描
@EnableCaching//增加redis的支持需要增加这一行
@EnableAspectJAutoProxy(proxyTargetClass = true)
public class DemoApplication {
    private static final Logger LOGGER = LoggerFactory.getLogger(DemoApplication.class);

//  @RequestMapping("/hello")
//  public String sayHello(){
//      return "hello";
//  }

    public static void main(String[] args) throws InterruptedException {
        ApplicationContext ctx = SpringApplication.run(DemoApplication.class, args);
    }
}

问题发现了,可能因为项目中有集合了shiro,在authRealm中把userService给设置成懒加载就好了,不知道为什么。

qq_40058321
cocosum
大约一个月之前 回复
DearLinxu
chengLinxu 您好,我也碰到这个问题,也是用了shiro,您后面是怎么解决这个问题的,麻烦告知下
大约一年之前 回复

谢谢大神的指点,在shiro里面添加注解@Lazy就可以了

图片说明

谢谢大神的指点!!!!!!!!!!!!

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
STL读取,切层
用vtk来实现STL的读取,显示,切层。用Qt做的交互界面。可以实现STL的读取,显示。还可以实现图像的沿z轴方向的均分切层。
什么是CPU跨切循环层?
在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数。rn---------------------------------rnCPU跨切循环层是什么意思,CPU是怎么做的?rn它究竟是个什么东西呢?
在SpringBoot中配置controller层切面和service层切面的区别
其实区别很简单,贴两端代码一目了然service层的aoppackage com.yy.aop; //省略导入包 @Aspect @Service(&quot;logAspect&quot;) public class LogAspect { @Pointcut(&quot;execution(* com.newer.service.*.*(..))&quot;) public void anyMethod(){ ...
为什么存在service层?
问题出现场景 初学的时候做一些非常简单的Javaweb的项目的时候,设计MVC模式时候,往往是通过jsp转Servlet,再转Dao层。 最近看一些其他资料的时候,发现这里设计MVC模式时候,多了一层Service层 到这里就非常疑惑了。Service层并没有做什么实际的工作,只是接受了Servlet,同时又调用了Dao。它本身并没有什么实际意义的代码,只是接收,调用。 很显然,这样增加了代码量...
求解!!!切!!!切!!!切!!!
刚刚学java,年末了,老师叫开发一个web购物页面,显示物品的图片及资料,要有登陆窗口,并将用户登陆的数据记入日志文件(log.txt)如果用户购买了某一物品后,要将用户购买物品的数量,价格,物品名这些数据插入到sql server数据库中。开始我用applet实现一些简单的功能如,登陆界面,并可以将数据插入到数据库中,不过用swing或awt组件编的applet那个界面实在是不好看,请问怎样写出像现在网络上那么漂亮的页面并能实现上述功能。求解!!!切!!!切!!!切!!!
使用mockito辅助springboot service层单元测试
目的: 测试一个springboot service层的一段插入MySQL代码性能; 要求: 1. 单元测试,不走web调用; 2. 数据来自第三方服务,数据量较大,返回时间10s+,希望mock掉此过程; 方案: junit+mockito 代码:
AOP切不了
[code=Java]rnrn rn rn rn rn rn rn rn rn rn rn rn[/code]rnrnrn[code=Java]package com.springmodel;rnrnpublic class Shiren rn public void singBefore()rn System.out.println("探险之前sing");rn rn public void singAlter()rn System.out.println("探险之后sing");rn rnrn[/code]rnrn程序能够运行成功过,但是这2条语句 [code=Java]rn [/code]rnrn运行没有效果
aop切面的简单使用
aop 的依赖 org.aspectj aspectjrt 1.8.4 org.aspectj aspectjtools 1.8.4 ...
spring的事务管理配置在DAO层,但是可以在service层使用
这是为什么?@Transactional
DAO层,Service层,Controller层、…
DAO层 DAO层主要是做数据持久层的工作,负责与数据库进行联络的一些任务都封装在此,DAO层的设计首先是设计DAO的接口,然后在Spring的配置文件中定义此接口的实现类,然后就可在模块中调用此接口来进行数据业务的处理,而不用关心此接口的具体实现类是哪个类,显得结构非常清晰,DAO层的数据源配置,以及有关数据库连接的参数都在Spring的配置文件中进行配置。  Service层 Se
SpringBoot通过AOP实现系统日志记录(二)-Service层日志监控
本文是SpringBoot通过AOP实现系统日志记录(二)-Service层日志监控,若要实现Controller层监控,请点击传送门: SpringBoot通过AOP实现系统日志记录(一)-Controller层日志监控(包括日志表设计) 由于公司业务上的需求,现在需要对整个系统做日志性能监控,方便开发人员快速定位系统瓶颈并方便开发人员去解决问题,相关代码如下: 1、引入依赖 &lt;...
service层能不能直接调用service层?
service层能不能直接调用service层?
spring aop同时代理service层和controller层的问题
再说spring aop同时代理controller和service之前,先讲一下代理service和代理controller的基本写法把。。。。 单一的代理service写法 applicationContext.xml 扫描切面--> context:component-scan base-package="com.yunhui.web.aop">conte
dao层,service层的设计
请问网站中对文件的操作,如文件的存储删除,是放在dao层还是service层
【心得】DAO层和Service层
DAO层和Service层联系与对比 在MVC和三层框架里的DAO大层分为DAO层和DAOImpl层,Service大层分为Service层和ServiceImpl层;有时候感觉没有那么大必要,分这么多层,太麻烦,有的一个层才写一两句话,这个怎么理解呢,好比一本书,写那么多页,其实也可以把所有的内容都写在一张纸上,只不过不方便,不好找。有目录,有页码,方便查找,修改,维护; 我的结构目录如下:
Service层和DAO层解析
dao完成连接数据库修改删除添加等的实现细节,例如sql语句是怎么写的,怎么把对象放入数据库的。service层是面向功能的,一个个功能模块比如说银行登记并完成一次存款,UI要把请求给service层,然后service曾将这一个case分解成许多步骤调用底层的实现完成这次存款,dao就是下面那层。
DAO层,Service层的疑问
一般DAO层负责数据库操作,Service层只处理业务。rn我的问题是,对于比较复杂的SQL语句,是写在DAO层还是业务层?rnrn我举例说明吧:rn比如有 学校、班级、学生表。rn对于基本的添加删除等,都好说。DAO层:SchoolDao、ClassDao、StudentDao。 Service层:SchoolService、ClassService、StudentServicern但是假设有个非常复杂的业务,比如要查询某学校,班级号为偶数,年龄多大,身高多少的学生,甚至说有可能需要递归等操作。 这种业务还需要在DAO层进行接口定义吗?就算要定义,似乎也不好定义啊rnrn我的理解,DAO层每个接口都负责自己的事情,比如StudentDao只负责学生的添加删除修改查询,而不会处理其他的。你可能会想,在StudentDao里面增加一个接口 FindBySchoolClassAgeHeight(。。。。),但是这样岂不是关联性太强了,或者说DAO层的业务性太强了?因此我认为,如果需要实现上面复杂的业务,就没办法做了。rnrn请各位教我。灰长感Xie
Service层可以相互调用吗
如题:Service层可以调用另一个service吗?
Service层为什么要单例
在开发时,共同遵循的原则都是Service和Dao层都是单例的,Dao好理解,因为Dao只是与数据库的交互。但是为什么Service也是单例?例如,以下的这段Service的代码,如果单例的话,不是存在同步的问题么?如果多个线程同时访问i变量的话,就会容易造成脏数据以及误读以及一下不可预计的错误。                经过实践证明,虽然这个Service是单例的,但是每个线程调用它这
SpringBoot在自定义类中调用service层等Spring其他层
SpringBoot在自定义类中调用service层等Spring其他层
service层AOP(基于注解的方法切入)
service层AOP(基于注解的方法切入)
Spring通过AOP在Service层注入用户信息
使用基于注解形式的AOP配置,在Service层或其他层,注入用户登录信息,这样就不需要在用到用户登录信息时总是注入Http相关对象,不用手动setter用户信息,且用户登录信息会随着session失效而自动注销。 . 相关类如下: 相关类说明: AppUserContextConfig:模块的配置类,负责扫描模块的Bean,当需要使用此模块时,用Import(AppUserCont
Aop实现日志的service层的拦截
注意:该拦截只适用于service的实现类1.自定义注解package com.chinook5.util; import java.lang.annotation.Retention; import java.lang.annotation.Target; import java.lang.annotation.RetentionPolicy; import java.lang.annotat
DAO层_Service层_Controller层、View层介绍
DAO层_Service层_Controller层、View层的一些了解知识,帮助填充对这部分比较空白的开发者们。
关于AOP切面的demo
关于AOP切面的demo,研究aop的一些过程,使用aspecJ 。
SpringMvc 在controll层读取properties文件的属性值
背景: 如上图,所属行业从数据库字典表中获取 //所属行业 List&lt;BaseDict&gt; industryType = baseDictService.queryBaseDictByDictTypeCode("001"); 这边的"001"存在硬编码,能否把字典表中dic_type_code类别分类的值集写在配置文件properties中,然后Controller层读取配置文件...
spring使用Aop切面切不到controller
开启切面都知道需要在xml文件中配置如下一段话 &lt;!-- 开启aop注解方式,默认为false --&gt; &lt;aop:aspectj-autoproxy&gt;&lt;/aop:aspectj-autoproxy&gt; 当你验证你的切面没有任何问题的时候,可以使用,但是就是切不到你想切的位置,那么请排查以下上面那段开启切面的配置对应的包路径是哪里,例如 &lt;!-- 开...
Spring框架:AOP切面的优先级
我们可以使用@Order(value)指定切面的优先级 其中value的值为:1、2、3... 值越小切面的优先级越高 举个例子 新建一个包:com.yorkmass.spring.aop 新建4个类,一个测试类(Main),一个spring配置文件applicationContext.xml 如下图所示,lib里面为需要导入的jar包  ArithmeticCalculator...
sql是不是可以写在service层?虽然service是业务层
我记得我曾经学javaweb的时候,也是被这个问题困惑过大半年,service层到底要不要出现sql或者Hibernate的hql语句? 我曾经有和你一样的困惑,比如有一个UserDao的接口,假如我想查询User,根据Id查询可能UserDao就需要设置一个findUserById(Integer id)这样的方法,根据用户名查询就是findUserByName(String name),根据
laravel service层分离和使用
新项目使用laravel,接触时间不长,不懂服务是什么东东,碰到开发过程中发现许多功能性代码在业务层多处使用,代码冗余太多,分离不开,研究了一下,准备使用laravel service 分离处理,简单说明一下使用经验.
springboot微服务整合:dubbo-provider的service层
课程目标rn你将能快速学会目前互联网的微服务最先进的企业在用技术框架和架构师思维rn适用人群rn互联网工作的人群rn课程简介rn适用人群rn互联网的技术人群
SpringBoot中工具类注入service,dao层
博客地址:博客地址 常常在工具类中会去进行数据库等操作 工具类常常是static静态 使用@Autowired注解就会为null @Component public class Server { @Autowired private VersionService versionService; private static VersionService v; ...
springboot普通工具类调用service层方法
参考:https://blog.csdn.net/wqc19920906/article/details/80009929 1、注解方式: @Component  public class TestUtils {     @Autowired     private ItemService itemService;          @Autowired     private ItemMap...
springboot自动切自定义配置
&amp;lt;plugin&amp;gt; &amp;lt;artifactId&amp;gt;maven-resources-plugin&amp;lt;/artifactId&amp;gt; &amp;lt;executions&amp;gt; &amp;lt;execution&amp;gt; &amp;lt;id&amp;gt;copy-active-profile-resources&amp;lt;/id&amp;gt; &amp
可以切图片大小保存图片
可以切图片大小保存图片,此资源非原创但或许在有时候的需要的时候不好找。这只是一个例子,如果有其它需求得靠自己修改(就像QQ,上传切图片大小)主要用于个人以后需求
窗口为什么切换了
有三个窗口,frmMain,frmManage, frmBlobrn代码如下rnfrmMain中代码rn frmManage.show ,mernrnfrmManage中代码rn frmBlob.show 1,mernrn如果没有打开frmBlob窗口,则显示正常,关掉frmManage之后,当前窗体是frmMainrn如果打开frmBlob窗口,再关掉frmManage之后,当前窗体就不是frmMain,切换到其它已打开的程序了,这是为什么呀
为什么dao层和service层要写接口和实现类
为什么要用Service接口?是让表示层不依赖于业务层的具体实现。为什么要用DAO接口?是让业务层不依赖于持久层的具体实现。举个例子,用DAO接口,那么持久层用Hibernate,还是用iBatis,还是 JDBC,随时可以替换,不用修改业务层Service类的代码。 不用接口的话,假如修改了dao中的代码,因为service引用了dao中的类,那么也要改变service里面的代码,改完之后要重新...
事务为什么加在service层而不加在dao层
**事务为什么加在service层而不加在dao层**事务注解 @Transactional一般的话都加在service层,下面是我的理解。什么是事务?在数据库中,所谓事务是指一组逻辑操作单元即一组sql语句。当这个单元中的一部分操作失败,整个事务回滚,只有全部正确才完成提交。判断事务是否配置成功的关键点在于出现异常时事务是否会回滚
SpringMVC Dao层注入到Service层,Service层注入到controller层及相关XML
1 本人新手,刚开始学习SringMVC框架,需要各个层之间的注入。 举个例子: 最初,在dao层实现service的方式是,new出来一个(每个方法都要new一次)。 IServiceImpl service =new IServiceImpl(); service.fill();//fill是我服务中的方法  完成注入之后,每个方法使用service如下: service.fill...
为什么事务加在service层而不加在dao层
为什么事务加在service层而不加在dao层? 什么是事务? 在数据库中,所谓事务是指一组逻辑操作单元即一组sql语句。当这个单元中的一部分操作失败,整个事务回滚,只有全部正确才完成提交。判断事务是否配置成功的关键点在于出现异常时事务是否会回滚 事务四大特性 1. 原子性(Atomicity)  原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 ...
相关热词 c++和c#哪个就业率高 c# 批量动态创建控件 c# 模块和程序集的区别 c# gmap 截图 c# 验证码图片生成类 c# 再次尝试 连接失败 c#开发编写规范 c# 压缩图片好麻烦 c#计算数组中的平均值 c#获取路由参数