乐趣区

关于java:注解类

@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

退出移动版