精华内容
下载资源
问答
  • spring注解@Service注解的使用

    万次阅读 多人点赞 2018-12-24 15:36:16
    要说明@Service注解的使用,就得说一下我们经常在spring配置文件applicationContext.xml中看到如下图中的配置: <!-- 采用扫描 + 注解的方式进行开发 可以提高开发效率,后期维护变的困难了,可读性变差了 ...

     要说明@Service注解的使用,就得说一下我们经常在spring配置文件applicationContext.xml中看到如下图中的配置:

    <!-- 采用扫描 + 注解的方式进行开发 可以提高开发效率,后期维护变的困难了,可读性变差了 -->
    <context:component-scan base-package="com.study.persistent" />

     在applicationContext.xml配置文件中加上这一行以后,将自动扫描指定路径下的包,如果一个类带了@Service注解,将自动注册到Spring容器,不需要再在applicationContext.xml配置文件中定义bean了,类似的还包括@Component、@Repository、@Controller。

    如这个类:

    @Service("courseDAO")
    @Scope("prototype")
    public class CourseDAOImpl extends HibernateDaoSupport implements CourseDAO{
    ......
    }

     其作用就相当于在applicationContext.xml配置文件里配置如下信息:

    <bean id="courseDAO"
          class="com.study.persistent.CourseDAOImpl" scope="prototype">
          ......    
    </bean>

     @Service("serviceName")注解相当于applicationContext.xml配置文件中配置的<bean id="serviceName">,表示给当前类命名一个别名,方便注入到其他需要用到的类中。@Service注解也可以不指定serviceName,如果不指定相当于<bean id="com.study.service.serviceName">,com.study.service.ServiceName就是这个类的全限定名,不加的话,默认别名就是当前类名,但是首字母小写。

    展开全文
  • 看了dubbo的xml配置后,表示好麻烦,服务端和消费端都要写一遍:类似下面的配置:(我用的spring4.1.3.RELEASE 和dubbo2.5.3) beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=...

    最近在学习,dubbo。看了dubbo的xml配置后,表示好麻烦,服务端和消费端都要写一遍:类似下面的配置:(我用的spring 4.1.3.RELEASE 和dubbo2.5.3)

     

     
    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!-- 服务提供方 --> <!-- 第一:服务提供方启名称 计算机要用名称 --> <dubbo:application name="service-product"/> <!-- 第二:到注册中心注册地址 连接zookeeper --> <!-- <dubbo:registry address="192.168.200.128:2181,192.168.200.129:2181,192.168.200.130:2181" protocol="zookeeper"/> --> <!--<dubbo:registry address="192.168.72.130:2181" protocol="zookeeper"/>--> <!--开发时优化,让消费者直接连接服务提供方。 生产环境要放开这段用上面的--> <dubbo:registry address="N/A"/> <!-- 第三:自定义端口号 默认端口是20880--> <dubbo:protocol host="127.0.0.1" port="20880"/> <!-- 第四:指定暴露的接口 --> <dubbo:service interface="cn.mytest.core.service.TestTbService" ref="testTbService"/> </beans>

     

     

     

     

     

    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    	xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans 
    		http://www.springframework.org/schema/beans/spring-beans-4.0.xsd 
    		
    		http://code.alibabatech.com/schema/dubbo        
    		http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    		
    		
    	 <!-- 服务消息方 -->
    	 <!-- 第一:服务消费方启名称  计算机要用名称 -->
    	 <dubbo:application name="mytest-console"/>
    	 <!-- 第二:到注册中心注册地址  连接zookeeper -->
    <!-- 	 <dubbo:registry address="192.168.200.128:2181,192.168.200.129:2181,192.168.200.130:2181" protocol="zookeeper"/> -->
    	 <!--<dubbo:registry address="192.168.72.130:2181" protocol="zookeeper"/>-->
    
    
    	 <!-- 第三:调用接口  -->
    	 <!--<dubbo:reference interface="cn.mytest.core.service.TestTbService" id="testTbService"/>-->
    
    	<!--全局设置超时时间 10分钟-->
    	 <dubbo:consumer timeout="600000"/>
    
    	<!--开发时优化,让消费者直接连接服务提供方。 生产环境要放开这段用上面的-->
    	<dubbo:registry address="N/A" />
    	<dubbo:protocol port="20080"/>
    
    	<!--check=false 服务消费方不检查服务提供方-->
    	<dubbo:reference interface="cn.mytest.core.service.TestTbService" id="testTbService"
    					 url="dubbo://127.0.0.1:20880" check="false"/>
    
    </beans>

    只有几个服务就还好,如果服务很多,估计配置文件会特别大,也不好维护。

     
    所以想看看注解的写法:根据官方的教程:https://dubbo.gitbooks.io/dubbo-user-book/configuration/annotation.html
    学着做了个。结果踩了很多坑,这里记录一下
     
    1.服务端的把上面 
     
    <dubbo:service interface="cn.mytest.core.service.TestTbService" ref="testTbService"/>

    替换成:

     
    <!-- 扫描注解包路径,多个包用逗号分隔,不填pacakge表示当前ApplicationContext中所有的类 --> <dubbo:annotation package="cn.mytest.core.service"/>

    然后在service的实现类名头上加:注解 @com.alibaba.dubbo.config.annotation.Service

    最终结果如下:
     
     
    import cn.itcast.core.dao.TestTbDao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import cn.itcast.core.pojo.TestTb; /** * 测试事务 */ @Component("testTbService") @com.alibaba.dubbo.config.annotation.Service @Transactional public class TestTbServiceImpl implements TestTbService { @Autowired private TestTbDao testTbDao; @Override public void insertTestTb(TestTb testTb) { testTbDao.insertTestTb(testTb); // throw new RuntimeException(); } }

     

     

     

    这里注意如果 你用的是spring的 service注解,就很容易扫包就扫不出来,服务端根本没有注册这个 service。

     

     

     

    目前我踩过的坑有如下几种 dubbo不能正常注册service。
    (1).用了spring的service注解:放在 dubbo的service注解上面时:     (后来再测试一遍,有莫名奇妙的可以了??)
     
    @org.springframework.stereotype.Service("testTbService") @com.alibaba.dubbo.config.annotation.Service public class TestTbServiceImpl implements TestTbService {..}
     

    (2).同时用了spring的事务注解 和serveice注解,这时什么顺序都不管用:。(后来再测试一遍,有莫名奇妙的可以了??)

     
     
    @org.springframework.stereotype.Service("testTbService") @com.alibaba.dubbo.config.annotation.Service @Transactional 
    public class TestTbServiceImpl implements TestTbService {..}

     

    后来发现 用spring的 @Component注解 时这种奇怪的问题才得到解决。

     

    如下:
     
     
     
    @Component("testTbService") @org.springframework.stereotype.Service("testTbService") @com.alibaba.dubbo.config.annotation.Service @Transactional public class TestTbServiceImpl implements TestTbService {..}

     

     

     

     

     

    2.消费端的注解配置: (ps我目前用的这个方法来配置消费端,service注入不进去,一直报service的空指针? 还是测试不通过,所以目前还是用的xml配置的方式 orz..)
     
    把上面的
     
     
    <dubbo:reference interface="cn.mytest.core.service.product.BrandService" id="brandService" url="dubbo://127.0.0.1:20880" check="false"/>

    替换成:

     
     
     
    <!-- 扫描注解包路径,多个包用逗号分隔,不填pacakge表示扫描当前ApplicationContext中所有的类 --> <!-- 代替上 扫描注解包路径,多个包用逗号分隔,不填pacakge表示当前ApplicationContext中所有的类 --> <dubbo:annotation package="cn.mytest.core.*"/>
     
     
    然后调用时在  注入的service 成员变量头上  加上: @com.alibaba.dubbo.config.annotation.Reference

     

    这里需要注意的有四点:

     

    1. 此处应该扫控制器了,而不是service。
    2. dubbo的扫包package的写法,他不像 spring里的扫包是  base-package,所以写完后要加上*,表示这个包里所有的内容。要不然就只扫这个包了。。
    3. 一定要让dubbo的扫包在 spring的前面,要不然 会报空指针的错,因为spring先扫了控制器之后,dubbo就再也注入不进去任何值了。
    4. spring的 那个自动装载注解就不需要了
     

     

    展开全文
  • spring基于注解的普通类怎么调用@Services注解service方法,需要一些先决条件: 1、如果你想用@autowired,那么这个类本身也应该是在spring的管理下的,即你的UserLogUtil也要标注为一个component(或Service),...
    spring基于注解的普通类怎么调用@Services注解的service方法,需要一些先决条件:
    1、如果你想用@autowired,那么这个类本身也应该是在spring的管理下的,即你的UserLogUtil也要标注为一个component(或Service),这样spring才知道要注入依赖;
    
    2、或者,不标注为@Component的话,此时不能通过@autowired来注入依赖,只能通过ApplicationContext来取得标注为Service的类:
    UserLogService service = ApplicationContext.getBean(UserLogService.class);

    展开全文
  • Spring注解方式无法扫描Service注解

    千次阅读 2019-04-11 11:51:41
    1.分析: 找不到bean的原因就是service注解没有被扫描到spring中生成bean 2.尝试:手动将service在spring的文件中进行配置,启动正常,访问也正常,更证明了第一点的分析结果。 3.查资料,大致查询了很多spring+...

    场景描述:系统启动没有任何错误,但是单独访问controller就会报错,原因是做了service注入。贴两张图

    1.分析: 找不到bean的原因就是service注解没有被扫描到spring中生成bean 

    2.尝试:手动将service在spring的文件中进行配置,启动正常,访问也正常,更证明了第一点的分析结果。

    3.查资料,大致查询了很多spring+springmvc+hibernate的框架搭建,核对我的配置(粗心),jar包等,其实都没错,贴一些我觉得写得比较明白清楚的博客地址大家可以参考,重复写相同的东西价值不大。

    这个是注解扫描冲突的说明:https://blog.csdn.net/xiaobao5214/article/details/52042041

    这个是ssh整合的例子:http://www.cnblogs.com/xuezhajun/p/7687230.html

    4.继续查询资料:我在开源中国查到一篇文章,和我的情况比较类似,但是楼主没有说明具体的解决情况,只是说了一句是配置文件问题,我想我的配置文件都能正常启动,理论上不应该存在问题才对,无奈下,再次返回检查配置文件,由于springmvc的扫描是生效了的,所以我就检查我的spring-context.xml文件, 两个文件都是最简单的配置,所以没贴,最后贴一下我报错的地方;

    5.反思一下,还是个人太粗心,spring框架已经最新到5版本了,所以不存在说配置无法扫描的情况,出现问题就应该是文件没对,各位共勉!

    展开全文
  • spring boot Service注解浅析

    千次阅读 2018-11-28 14:34:22
    @Slf4j =&gt;实现日志输出(可使用Log.info()/log.error()等···) ...@Primary注解的实例优先于其他实例被注入。 public class ContractServiceImpl implements ContractService { @Res...
  • Spring Boot的@Service注解

    千次阅读 2021-02-03 20:53:20
    默认按照名称进行装配,如果名称可以通过name属性指定,如果没有name属性,注解写在字段上时,默认去字段名进行查找,如果注解写在setter方法上,默认按照方法属性名称进行装配。当找不到匹配的bean时,才按照类型...
  • 文章目录1 xml代码2 原因说明2.1 俩容器关系2.2 全部放到spring.xml2.3 全部放到springmvc.xml 1 xml代码 在springmvc中,我们经常配置两个...一般我们在spring.xml中不扫描@Controller注解,在springmvc.xml中不扫...
  • Spring注解@Qualifier用法

    万次阅读 多人点赞 2018-06-07 16:21:26
    Spring注解@Qualifier用法 在Controller中需要注入service那么我的这个server有两个实现类如何区分开这两个impl呢? 根据注入资源的注解不同实现的方式有一点小小的区别 下面上铺垫图 ...
  • 希望用@Service注解来做InitBean,但是InitBean需要用到其他的Service这样就会出现空指针的问题,如何通过注解的方式来控制spring加载Service顺序
  • Spring的@Service注解的用法

    千次阅读 2019-07-29 15:20:53
    首先,在applicationContext.xml文件中加一行...加上这一行以后,将自动扫描路径下面的包,如果一个类带了@Service注解,将自动注册到Spring容器,不需要再在applicationContext.xml文件定义bean了,类似的还包括@C...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 232,837
精华内容 93,134
关键字:

service方法注解spring

spring 订阅