@Autowired//默认按type注入 @Qualifier(“cusInfoService”)//个别作为@Autowired()的润饰用

@Resource(name=“cusInfoService”)//默认按name注入,能够通过name和type属性进行选择性注入

个别@Autowired和@Qualifier一起用,@Resource独自用。

当然没有抵触的话@Autowired也能够独自用

这三个是依据理论状况来应用的,通常应用@Autowired和@Resource多一些,bean的名字不必写,而UserServiceImpl下面能会这样写 @Service(“userService”)。是整个我的项目设计时候思考的状况,如果架构设计师思考的比拟精密,要求比拟严格,要求我的项目上线后的访问速度比拟好,通常是思考速度了。这个时候@Autowired没有@Resource好用,因为@Resource能够依据名字来搜寻,是这样写的@Resource(“userService”)。不应用@Autowired @Qualifie(“userService”) 的起因很简略,有点长,不喜爱,减少工作量。因为依据名字搜寻是最快的,就像查数据库一样,依据Id查找最快。因为这里的名字与数据库外面的ID是一样的作用。此时工作量天然就减少了。而如果不必注解,用xml文件的时候,对于注入Bean的时候要求写一个Id,xml文件时候的id就相当于这里的名字。

通常状况一个Bean的注解写错了,会报上面这些谬误,最为常见,No bean named ‘user’ is defined,这个示意没有找到被命名为user的Bean,艰深的说,就是名字为user的类型,以及它的子类型,呈现这个谬误的起因就是注入时候的类型名字为user,而搜寻的时候找不到,也就是说可能那个搜寻的类型,并没有命令为user,解决办法就是找到这个类型,去命令为user,

上面这个谬误也常见,No qualifying bean of type [com.service.UserService] found for dependency: 这个谬误的起因就是类型下面没有加@Service这个注入,不仅仅是@Service,如果是其余层也会呈现这个谬误,这里我是以Service为例子阐明,如果是DAO层就是没有加@Repository,Controller层,则是没有加@Controller。

还有,如果还想再简略点,无论是DAO,Controller,Service三个层,都能够用这个注解,@Component,这个注解通用所有的Bean,然而应用的人比拟少,因为 MVC 的分层设计准则,用@Repository,@Service,@Controller,这个能够区别 MVC 准则中的DAO,Service,Controller。便于辨认。

-----------罕用注解--------

–定义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