发布网友 发布时间:2024-09-26 14:58
共1个回答
热心网友 时间:2024-10-06 08:44
@Service注解无法被扫描到的问题偶然发现在Service层创建接口和实现类,且在实现类中加入@Service注解,但并不能通过
SpringService层配置文件中配置的扫描配置
context:component-scanbase-package="com.*.Service"/context:component-scan
成功扫描并加入IOC容器中
打开Service层包中,发现接口名采用了IUserService.java的写法
将接口名改为IuserService.java后
@Service注解能够被正常扫描
结论:不建议在使用注解的接口或实现类中使用连续大写字母的名称,Spring在扫描注解时会自动将头字母改为小写并加入到IOC容器中,连续的大写字母会导致注解无法被扫描到
@Service注解是标注在实现类上的的接口中添加注解还是在实现类impl@Service注解是标注在实现类上的
因为@Service是把spring容器中的bean进行实例化,也就是等同于new操作,只有实现类是可以进行new实例化的,而接口则不能,所以是加在实现类上的。
IOC的思想:A不直接调用B,而是通过调用生产B的工厂(工厂模式),由B工厂来创建B
有三种普通注入方式,分为构造函数的注入、属性注入、接口注入。
将注入方式交给第三方,通过bean的注解,想调用时直接通过注解注入。
所以通过注解注入bean,就是实例化依赖类的方式,
这也是为什么要将@Service和@Repository放到实现类上面而不是接口类上面,
接口只是一个规范,需要各种实现类去实现这个接口,我们要用的就是这些实用类的方法。
如果采用@Autowired来注解,则同样无需指定name属性,若是实现该接口有多个类,则需要通过@Qualifier来做区分
@Service、@Repository注解是放到service或者dao类的实现类还是接口类中
-----------------------------------
在service的接口中添加注解还是在实现类impl
@Service注解的使用@Service注解的使用
首先,在applicationContext.xml文件中加一行:
context:component-scanbase-package="com.hzhi.clas"/
加上这一行以后,将自动扫描路径下面的包,如果一个类带了@Service注解,将自动注册到Spring容器,不需要再在applicationContext.xml文件定义bean了,类似的还包括@Component、@Repository、@Controller。
比如下面这个类:
@Service("courseDAO")
@Scope("prototype")
publicclassCourseDAOImplextendsHibernateDaoSupportimplementsCourseDAO{......}
其作用就相当于applicationContext.xml文件里面的:
beanid="courseDAO"class="com.hzhi.course.dao.CourseDAOImpl"scope="prototype"/bean
热心网友 时间:2024-10-06 08:47
@Service注解无法被扫描到的问题偶然发现在Service层创建接口和实现类,且在实现类中加入@Service注解,但并不能通过
SpringService层配置文件中配置的扫描配置
context:component-scanbase-package="com.*.Service"/context:component-scan
成功扫描并加入IOC容器中
打开Service层包中,发现接口名采用了IUserService.java的写法
将接口名改为IuserService.java后
@Service注解能够被正常扫描
结论:不建议在使用注解的接口或实现类中使用连续大写字母的名称,Spring在扫描注解时会自动将头字母改为小写并加入到IOC容器中,连续的大写字母会导致注解无法被扫描到
@Service注解是标注在实现类上的的接口中添加注解还是在实现类impl@Service注解是标注在实现类上的
因为@Service是把spring容器中的bean进行实例化,也就是等同于new操作,只有实现类是可以进行new实例化的,而接口则不能,所以是加在实现类上的。
IOC的思想:A不直接调用B,而是通过调用生产B的工厂(工厂模式),由B工厂来创建B
有三种普通注入方式,分为构造函数的注入、属性注入、接口注入。
将注入方式交给第三方,通过bean的注解,想调用时直接通过注解注入。
所以通过注解注入bean,就是实例化依赖类的方式,
这也是为什么要将@Service和@Repository放到实现类上面而不是接口类上面,
接口只是一个规范,需要各种实现类去实现这个接口,我们要用的就是这些实用类的方法。
如果采用@Autowired来注解,则同样无需指定name属性,若是实现该接口有多个类,则需要通过@Qualifier来做区分
@Service、@Repository注解是放到service或者dao类的实现类还是接口类中
-----------------------------------
在service的接口中添加注解还是在实现类impl
@Service注解的使用@Service注解的使用
首先,在applicationContext.xml文件中加一行:
context:component-scanbase-package="com.hzhi.clas"/
加上这一行以后,将自动扫描路径下面的包,如果一个类带了@Service注解,将自动注册到Spring容器,不需要再在applicationContext.xml文件定义bean了,类似的还包括@Component、@Repository、@Controller。
比如下面这个类:
@Service("courseDAO")
@Scope("prototype")
publicclassCourseDAOImplextendsHibernateDaoSupportimplementsCourseDAO{......}
其作用就相当于applicationContext.xml文件里面的:
beanid="courseDAO"class="com.hzhi.course.dao.CourseDAOImpl"scope="prototype"/bean