@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