这里的属性注入注解是如何被识别的?

这里的属性注入注解是如何被识别的?

在SpringDemo2.java中有个使用注解的属性注入(

 @Resource(name="customerDao")

    private CustomerDao customerDao;

),

而在spring.xml中并没有扫描配置,那这个注解是如何被识别的?

spring.xml文件如下:

<?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.xsd">


    <!--xml配置方式-->

    <!--配置目标类-->

    <bean id="customerDao" class="com.imooc.aspectJ.demo2.CustomerDaoImpl"/>


    <!--配置切面类-->

    <bean id="myAspectXml" class="com.imooc.aspectJ.demo2.MyAspectXml"/>


    <!--aop相关配置-->

    <aop:config>

        <!--配置切入点-->

        <aop:pointcut id="pointcut1" expression="execution(* com.imooc.aspectJ.demo2.CustomerDao.save(..))"/>

        <aop:pointcut id="pointcut2" expression="execution(* com.imooc.aspectJ.demo2.CustomerDao.update(..))"/>

        <aop:pointcut id="pointcut3" expression="execution(* com.imooc.aspectJ.demo2.CustomerDao.delete(..))"/>

        <aop:pointcut id="pointcut4" expression="execution(* com.imooc.aspectJ.demo2.CustomerDao.findOne(..))"/>

        <aop:pointcut id="pointcut5" expression="execution(* com.imooc.aspectJ.demo2.CustomerDao.findAll(..))"/>


        <!--配置aop的切面-->

        <aop:aspect ref="myAspectXml">

            <!--配置前置通知-->

            <aop:before method="before" pointcut-ref="pointcut1"/>

            <!--配置后置通知-->

            <aop:after-returning method="afterReturning" pointcut-ref="pointcut2" returning="result"/>

            <!--配置环绕通知-->

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

            <!--异常抛出通知-->

            <aop:after-throwing method="afterThrowing" pointcut-ref="pointcut4" throwing="e"/>

            <!--最终通知-->

            <aop:after method="after" pointcut-ref="pointcut5"/>

        </aop:aspect>

    </aop:config>

</beans>


正在回答

登陆购买课程后可参与讨论,去登陆

5回答

同学你好,同学的说法是正确的,<context:annotation-config/>对已注册过的Bean的进行操作的配置,注入到某个类的内部也是通过@Resource这个注解。

        但是如果是结合单元测试@Resource这个注解可以直接使用,不写<context:annotation-config/>也是可以的,但是建议在其他地方还是写上。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 慕沐8221787 提问者 #1
    是不是说,如果没有单元测试,要想使用@Resource这个注解,必须配置<context:annotation-config/>。
    2020-02-07 11:25:32
  • 好帮手慕小班 回复 提问者 慕沐8221787 #2
    同学你好,同学的理解是正确的 在书写时还是建议加上<context:annotation-config/> 。 如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2020-02-07 16:19:31
  • 慕沐8221787 提问者 #3
    谢谢!答案的求证实在来之不易。几点建议:1、答疑老师要彻底弄清楚提问者的疑惑点是什么,做到答疑和授课并重;2、准确无误地找到答案,要直奔疑点、道理明了、逻辑清晰、表述准确到位,让提问者迅速得到有效的回复,以便加快学习进度,提高学习效率。
    2020-02-07 17:07:33
好帮手慕小班 2020-02-06 19:18:34

同学你好,1、<context:annotation-config/>的作用:

        它是对已注册过的Bean的进行操作的配置,也就是说,Bean已经通过某种方式(比如Xml配置)被注册,然后使用这个配置。比如注入到某个类的内部。

    2、<context:component-scan />的作用:

        <context:component-scan />和<context:annotation-config/>一样的作用,另外 它还可以扫描指定包下的类,将拥有注解的类注册到Spring中

在本小节的案例中,@Resource注解是属于J2EE的注解,按照名称进行装配,可以直接通过name属性进行指定名字。在测试的SpringDemo2中,已经使用xml配置注册了customerDao类,在测试类的单元测试里就可以直接使用了。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 慕沐8221787 #1
    请对第一条再明确解释一下:1、<context:annotation-config/>的作用: 它是对已注册过的Bean的进行操作的配置,也就是说,Bean已经通过某种方式(比如Xml配置)被注册,然后使用这个配置。比如注入到某个类的内部。 如何注入到类的内部,难道不是通过@Resource这个注解吗?
    2020-02-06 21:06:35
好帮手慕小班 2020-02-06 15:09:47

同学你好,这里和课程讲的并没有冲突。这里可以这样理解一下:

  在 Spring的XML和注解整合开发中:

    <context:annotation-config/>配置,会扫描到ProService这个类,将类和@Resource标注的属性交给Spring管理,这样这个ProService类就被注入到Spring中了。

http://img1.sycdn.imooc.com//climg/5e3baf7409abec8305100195.jpg

    而在本节案例中,是将spring中的customerDao这个bean注入到类中,这个bean已经在Spring中,不需要再扫描,就可以直接注入了。

http://img1.sycdn.imooc.com//climg/5e3bb70909f0792804200134.jpg

http://img1.sycdn.imooc.com//climg/5e3bb723093348c609290091.jpg

如果是需要交给Spring管理的bean,需要加 <context:annotation-config/>这样的配置扫描,如果是Spring向类中注入属性,则不需要加。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 慕沐8221787 #1
    那什么场景下要用到<context:component-scan base-package="com.imooc.sm"/>这样的标签,它与<context:annotation-config/>标签的本质区别是什么?
    2020-02-06 15:29:32
好帮手慕小班 2020-02-05 19:47:37

同学你好,@Resource注解是Spring中的注解,可以直接使用。spring扫描自动命名机制-将类的首字母小写当做name,@Resource是通过name注入,所以@Resource(name="customerDao")可以被识别。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 慕沐8221787 #1
    你看看”Spring Bean管理”这个部分的“第六章 Spring的XML和注解整合开发”的课件,这里的类是依靠在配置文件的bean标签交给spring管理的,而属性注入的注解是依靠配置文件中的 <context:annotation-config/>进行识别的,难道这里的老师讲得不对吗?
    2020-02-05 22:11:16
  • 好帮手慕小班 回复 提问者 慕沐8221787 #2
    同学你好,这里可能是同学理解有些误差,如果是一个类中属性想要注入到spring中,需要使用<context:annotation-config/>或者<context:component-san>扫描,如果是向类中注入属性,不需要呐。如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
    2020-02-06 10:45:43
  • 提问者 慕沐8221787 #3
    什么叫一个类中属性想要注入到spring中,什么叫向类中注入属性,请分别举例说明一下,课程里老师一直不都是讲通过spring将属性注入类中这样一个概念吗?,怎么又来了一个属性注入spring中的说法?另外,希望答疑老师与”Spring Bean管理”这个部分的“第六章 Spring的XML和注解整合开发”的课件老师沟通一下,你们讲的明显是矛盾的,只有自己完全理解了,才能做好答疑解释工作,希望慕课网对学员答疑给出明确具体、逻辑清晰、道理明了的解答。
    2020-02-06 11:11:55
好帮手慕小班 2020-02-05 17:32:06

同学你好,这里同学是说CustomerDao这个类通过注解注入怎样被识别的吗,如果是,在xml文件中有对应的配置,例如:

http://img1.sycdn.imooc.com//climg/5e3a8b4009d2f3c909180198.jpg

如果同学想表述的不是这个意思,还麻烦同学具体描述一下。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

  • 提问者 慕沐8221787 #1
    我要问的是 @Resource(name="customerDao")这个注解是如何被识别的,配置文件中并没有配置注解的扫描项。
    2020-02-05 17:45:56
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
SSM主流框架入门与综合项目实战2018版
  • 参与学习           人
  • 提交作业       205    份
  • 解答问题       4317    个

Java中非常实用的SSM整合开发内容,从Spring开始,到MyBaits的进阶内容,再到SpringMVC的应用,最后是SSM整合开发案例,逐步深入,助你成长为一名Java工程师!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师