Spring注解方式无法扫描Service问题

今天在新起Spring MVC框架时,遇到无法通过注解方式扫描Service层的问题,控制台没有报spring异常,仅是包无法找到mapped name *Service ......

郁闷了半天,后来发现少了jar包:common-annotations.jar

添加就可以了!



打开配置 <context:component-scan base-package="com.xxx.*"/>
spring 会自动扫描com.xxx包下面有注解的类,完成Bean的装配。


2 在classPath中加入注解用的jar包
lib\j2ee\common-annotations.jar
 
Spring 的context:component-scan扫描支持扫描jar包的方法:
eclipse自带的jar打包程序,默认打包的时候有个选项<Add directory entries>没有勾选,只要勾选了,就可以了.


-----------常用注解--------

--定义Bean的注解

@Controller
@Controller("Bean的名称")
定义控制层Bean,如Action

@Service         
@Service("Bean的名称")
定义业务层Bean

@Repository  
@Repository("Bean的名称")
定义DAO层Bean

@Component 
定义Bean, 不好归类时使用.

--自动装配Bean (选用一种注解就可以)
@Autowired  (Srping提供的)
默认按类型匹配,自动装配(Srping提供的),可以写在成员属性上,或写在setter方法上

@Autowired(required=true) 
一定要找到匹配的Bean,否则抛异常。 默认值就是true

@Autowired
@Qualifier("bean的名字")
按名称装配Bean,与@Autowired组合使用,解决按类型匹配找到多个Bean问题。

@Resource   JSR-250提供的
默认按名称装配,当找不到名称匹配的bean再按类型装配.
可以写在成员属性上,或写在setter方法上
可以通过@Resource(name="beanName") 指定被注入的bean的名称, 要是未指定name属性, 默认使用成员属性的变量名,一般不用写name属性.
@Resource(name="beanName")指定了name属性,按名称注入但没找到bean, 就不会再按类型装配了.

@Inject   是JSR-330提供的
按类型装配,功能比@Autowired少,没有使用的必要。

--定义Bean的作用域和生命过程
@Scope("prototype")
值有:singleton,prototype,session,request,session,globalSession

@PostConstruct
相当于init-method,使用在方法上,当Bean初始化时执行。

@PreDestroy
相当于destory-method,使用在方法上,当Bean销毁时执行。

--声明式事务
@Transactional

猜你喜欢

转载自fengjianquan9527.iteye.com/blog/2147060