@Autowired//默认按类型注入@Qualifier("cusInfoService")//一般用作@Autowired()的修饰@Resource(name="cusInfoService")//默认按名称注入,可以通过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的annotation写错了,会报如下错误,最常见的,Nobeannamed'user'isdefined,意思是没有找到名为user的Bean,通俗的说就是类型nameduser,及其子类型,出现这个错误的原因是注入时的类型名是user,但是搜索的时候找不到,也就是说搜索的类型可能没有user的命令,解决方案是找到这种类型。以用户身份去执行命令,下面的错误也很常见,Noqualifyingbeanoftype[com.service.UserService]foundfordependency:这个错误的原因是类型上没有注入@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'sname")按名称组装bean,结合@Autowired使用,解决通过类型匹配查找多个bean的问题。@ResourceJSR-250按名称提供默认程序集。当没有找到匹配名字的bean时,就按类型组装。可以写在member属性上,也可以写在setter方法上,可以通过@Resource(name="beanName")指定注入bean的名称,如果不指定name属性,则为注入的bean的变量名默认使用member属性,name属性一般不需要。@Resource(name="beanName")指定name属性,按name注入但没有找到bean,则不再按类型组装。@Inject是JSR-330提供的按类型组合。它的功能比@Autowired少,没有必要使用。–定义Bean的作用域和生命过程@Scope("prototype")值有:singleton,prototype,session,request,session,globalSession@PostConstruct相当于init-method,用在方法上,执行时Bean被初始化。@PreDestroy相当于destroy-method,用在方法上,在Bean销毁时执行。–声明式事务@Transactional
