Java开发常⽤的注解有@Mapper @Repository(持久层)、@Service(业务层)、@Controller (控制层)和 @Componen(其它),以及@Autowired 和@Resource
@Mapper
从mybatis3.4.0开始加⼊了@Mapper注解,添加@Mapper注解的接⼝⽣成⼀个实现类,⽬的就是为了不再写mapper映射⽂件, 把mapper这个DAO交給Spring管理。
@Repository
@Repository对应数据访问层Bean ,例如:
@Repository(value=\"userDao\")
public class UserDaoImpl extends BaseDaoImpl { ………}@Repository(value=\"userDao\")注解是告诉Spring,让Spring创建⼀个名字叫“userDao”的UserDaoImpl实例。当Service需要使⽤Spring创建的名字叫“userDao”的UserDaoImpl实例时,就可以使⽤@Resource(name = \"userDao\")注解告诉Spring,Spring把创建好的userDao注⼊给Service即可。// 注⼊userDao,从数据库中根据⽤户Id取出指定⽤户时需要⽤到 @Resource(name = \"userDao\") private BaseDao userDao;@Controller@Controller对应表现层的Bean,也就是Action,例如:@Controller@Scope(\"prototype\")public class UserAction extends BaseAction{ ……}使⽤@Controller注解标识UserAction之后,就表⽰要把UserAction交给Spring容器管理,在Spring容器中会存在⼀个名字为\"userAction\"的action,这个名字是根据UserAction类名来取的。注意:如果@Controller不指定其value【@Controller】,则默认的bean名字为这个类的类名⾸字母⼩写,如果指定value【@Controller(value=\"UserAction\")】或者【@Controller(\"UserAction\")】,则使⽤value作为bean的名字。这⾥的UserAction还使⽤了@Scope注解,@Scope(\"prototype\")表⽰将Action的范围声明为原型,可以利⽤容器的scope=\"prototype\"来保证每⼀个请求有⼀个单独的Action来处理,避免struts中Action的线程安全问题。spring 默认scope 是单例模式(scope=\"singleton\"),这样只会创建⼀个Action对象,每次访问都是同⼀Action对象,数据不安全,struts2 是要求每次次访问都对应不同的Action,scope=\"prototype\" 可以保证当有请求的时候都创建⼀个Action对象@Service@Service对应的是业务层Bean,例如:@Service(\"userService\")public class UserServiceImpl implements UserService { ………}@Service(\"userService\")注解是告诉Spring,当Spring要创建UserServiceImpl的的实例时,bean的名字必须叫做\"userService\",这样当Action需要使⽤UserServiceImpl的的实例时,就可以由Spring创建好的\"userService\",然后注⼊给Action:在Action只需要声明⼀个名字叫“userService”的变量来接收由Spring注⼊的\"userService\"即可,具体代码如下:// 注⼊userService@Resource(name = \"userService\") private UserService userService;但现在⾃⼰不能主动去new“UserServiceImpl”类的实例,new“UserServiceImpl”类的实例的权⼒已经被Spring拿⾛了,只有Spring才能够new“UserServiceImpl”类的实例,⽽Action只能等Spring创建好“UserServiceImpl”类的实例后,再“恳求”Spring把创建好的“UserServiceImpl”类的实例给他,这样他才能够使⽤“UserServiceImpl”,这就是Spring核⼼思想“控制反转”,也叫“依赖注⼊”,“依赖注⼊”也很好理解,Action需要使⽤UserServiceImpl⼲活,那么就是对UserServiceImpl产⽣了依赖,Spring把Acion需要依赖的UserServiceImpl注⼊(也就是“给”)给Action,这就是所谓的“依赖注⼊”。对Action⽽⾔,Action依赖什么东西,就请求Spring注⼊给他,对Spring⽽⾔,Action需要什么,Spring就主动注⼊给他。@Component@Component泛指组件,当组件不好归类的时候,我们可以使⽤这个注解进⾏标注。@Resource和@Autowired@Resource和@Autowired都是做bean的注⼊时使⽤,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导⼊,但是Spring⽀持该注解的注⼊。1、共同点两者都可以写在字段和setter⽅法上。两者如果都写在字段上,那么就不需要再写setter⽅法。2、不同点@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使⽤按照名称(byName)来装配,可以结合@Qualifier注解⼀起使⽤(@Service注解必须写名字)。如下:public class TestServiceImpl { @Autowired@Qualifier(\"userDao\") private UserDao userDao; }@Resource@Resource默认按照ByName⾃动注⼊,由J2EE提供,需要导⼊包javax.annotation.Resource。@Resource有两个重要的属性:name和type,⽽Spring将@Resource注解的name属性解析为bean的名字,⽽type属性则解析为bean的类型。所以,如果使⽤name属性,则使⽤byName的⾃动注⼊策略,⽽使⽤type属性时则使⽤byType⾃动注⼊策略。如果既不制定name也不制定type属性,这时将通过反射机制使⽤byName⾃动注⼊策略。public class TestServiceImpl {// 下⾯两种@Resource只要使⽤⼀种即可 @Resource(name=\"userDao\") private UserDao userDao; // ⽤于字段上@Resource(name=\"userDao\")public void setUserDao(UserDao userDao) { // ⽤于属性的setter⽅法上 this.userDao = userDao; }}注:最好是将@Resource放在setter⽅法上,因为这样更符合⾯向对象的思想,通过set、get去操作属性,⽽不是直接去操作属性。
@Repository(value=\"userDao\")注解是告诉Spring,让Spring创建⼀个名字叫“userDao”的UserDaoImpl实例。
当Service需要使⽤Spring创建的名字叫“userDao”的UserDaoImpl实例时,就可以使⽤@Resource(name = \"userDao\")注解告诉Spring,Spring把创建好的userDao注⼊给Service即可。
// 注⼊userDao,从数据库中根据⽤户Id取出指定⽤户时需要⽤到 @Resource(name = \"userDao\") private BaseDao userDao;@Controller@Controller对应表现层的Bean,也就是Action,例如:@Controller@Scope(\"prototype\")public class UserAction extends BaseAction{ ……}使⽤@Controller注解标识UserAction之后,就表⽰要把UserAction交给Spring容器管理,在Spring容器中会存在⼀个名字为\"userAction\"的action,这个名字是根据UserAction类名来取的。注意:如果@Controller不指定其value【@Controller】,则默认的bean名字为这个类的类名⾸字母⼩写,如果指定value【@Controller(value=\"UserAction\")】或者【@Controller(\"UserAction\")】,则使⽤value作为bean的名字。这⾥的UserAction还使⽤了@Scope注解,@Scope(\"prototype\")表⽰将Action的范围声明为原型,可以利⽤容器的scope=\"prototype\"来保证每⼀个请求有⼀个单独的Action来处理,避免struts中Action的线程安全问题。spring 默认scope 是单例模式(scope=\"singleton\"),这样只会创建⼀个Action对象,每次访问都是同⼀Action对象,数据不安全,struts2 是要求每次次访问都对应不同的Action,scope=\"prototype\" 可以保证当有请求的时候都创建⼀个Action对象@Service@Service对应的是业务层Bean,例如:@Service(\"userService\")public class UserServiceImpl implements UserService { ………}@Service(\"userService\")注解是告诉Spring,当Spring要创建UserServiceImpl的的实例时,bean的名字必须叫做\"userService\",这样当Action需要使⽤UserServiceImpl的的实例时,就可以由Spring创建好的\"userService\",然后注⼊给Action:在Action只需要声明⼀个名字叫“userService”的变量来接收由Spring注⼊的\"userService\"即可,具体代码如下:// 注⼊userService@Resource(name = \"userService\") private UserService userService;但现在⾃⼰不能主动去new“UserServiceImpl”类的实例,new“UserServiceImpl”类的实例的权⼒已经被Spring拿⾛了,只有Spring才能够new“UserServiceImpl”类的实例,⽽Action只能等Spring创建好“UserServiceImpl”类的实例后,再“恳求”Spring把创建好的“UserServiceImpl”类的实例给他,这样他才能够使⽤“UserServiceImpl”,这就是Spring核⼼思想“控制反转”,也叫“依赖注⼊”,“依赖注⼊”也很好理解,Action需要使⽤UserServiceImpl⼲活,那么就是对UserServiceImpl产⽣了依赖,Spring把Acion需要依赖的UserServiceImpl注⼊(也就是“给”)给Action,这就是所谓的“依赖注⼊”。对Action⽽⾔,Action依赖什么东西,就请求Spring注⼊给他,对Spring⽽⾔,Action需要什么,Spring就主动注⼊给他。@Component@Component泛指组件,当组件不好归类的时候,我们可以使⽤这个注解进⾏标注。@Resource和@Autowired@Resource和@Autowired都是做bean的注⼊时使⽤,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导⼊,但是Spring⽀持该注解的注⼊。1、共同点两者都可以写在字段和setter⽅法上。两者如果都写在字段上,那么就不需要再写setter⽅法。2、不同点@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使⽤按照名称(byName)来装配,可以结合@Qualifier注解⼀起使⽤(@Service注解必须写名字)。如下:public class TestServiceImpl { @Autowired@Qualifier(\"userDao\") private UserDao userDao; }@Resource@Resource默认按照ByName⾃动注⼊,由J2EE提供,需要导⼊包javax.annotation.Resource。@Resource有两个重要的属性:name和type,⽽Spring将@Resource注解的name属性解析为bean的名字,⽽type属性则解析为bean的类型。所以,如果使⽤name属性,则使⽤byName的⾃动注⼊策略,⽽使⽤type属性时则使⽤byType⾃动注⼊策略。如果既不制定name也不制定type属性,这时将通过反射机制使⽤byName⾃动注⼊策略。public class TestServiceImpl {// 下⾯两种@Resource只要使⽤⼀种即可 @Resource(name=\"userDao\") private UserDao userDao; // ⽤于字段上@Resource(name=\"userDao\")public void setUserDao(UserDao userDao) { // ⽤于属性的setter⽅法上 this.userDao = userDao; }}注:最好是将@Resource放在setter⽅法上,因为这样更符合⾯向对象的思想,通过set、get去操作属性,⽽不是直接去操作属性。
@Controller
@Controller对应表现层的Bean,也就是Action,例如:
@Scope(\"prototype\")
public class UserAction extends BaseAction{ ……}使⽤@Controller注解标识UserAction之后,就表⽰要把UserAction交给Spring容器管理,在Spring容器中会存在⼀个名字为\"userAction\"的action,这个名字是根据UserAction类名来取的。注意:如果@Controller不指定其value【@Controller】,则默认的bean名字为这个类的类名⾸字母⼩写,如果指定value【@Controller(value=\"UserAction\")】或者【@Controller(\"UserAction\")】,则使⽤value作为bean的名字。这⾥的UserAction还使⽤了@Scope注解,@Scope(\"prototype\")表⽰将Action的范围声明为原型,可以利⽤容器的scope=\"prototype\"来保证每⼀个请求有⼀个单独的Action来处理,避免struts中Action的线程安全问题。spring 默认scope 是单例模式(scope=\"singleton\"),这样只会创建⼀个Action对象,每次访问都是同⼀Action对象,数据不安全,struts2 是要求每次次访问都对应不同的Action,scope=\"prototype\" 可以保证当有请求的时候都创建⼀个Action对象@Service@Service对应的是业务层Bean,例如:@Service(\"userService\")public class UserServiceImpl implements UserService { ………}@Service(\"userService\")注解是告诉Spring,当Spring要创建UserServiceImpl的的实例时,bean的名字必须叫做\"userService\",这样当Action需要使⽤UserServiceImpl的的实例时,就可以由Spring创建好的\"userService\",然后注⼊给Action:在Action只需要声明⼀个名字叫“userService”的变量来接收由Spring注⼊的\"userService\"即可,具体代码如下:// 注⼊userService@Resource(name = \"userService\") private UserService userService;但现在⾃⼰不能主动去new“UserServiceImpl”类的实例,new“UserServiceImpl”类的实例的权⼒已经被Spring拿⾛了,只有Spring才能够new“UserServiceImpl”类的实例,⽽Action只能等Spring创建好“UserServiceImpl”类的实例后,再“恳求”Spring把创建好的“UserServiceImpl”类的实例给他,这样他才能够使⽤“UserServiceImpl”,这就是Spring核⼼思想“控制反转”,也叫“依赖注⼊”,“依赖注⼊”也很好理解,Action需要使⽤UserServiceImpl⼲活,那么就是对UserServiceImpl产⽣了依赖,Spring把Acion需要依赖的UserServiceImpl注⼊(也就是“给”)给Action,这就是所谓的“依赖注⼊”。对Action⽽⾔,Action依赖什么东西,就请求Spring注⼊给他,对Spring⽽⾔,Action需要什么,Spring就主动注⼊给他。@Component@Component泛指组件,当组件不好归类的时候,我们可以使⽤这个注解进⾏标注。@Resource和@Autowired@Resource和@Autowired都是做bean的注⼊时使⽤,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导⼊,但是Spring⽀持该注解的注⼊。1、共同点两者都可以写在字段和setter⽅法上。两者如果都写在字段上,那么就不需要再写setter⽅法。2、不同点@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使⽤按照名称(byName)来装配,可以结合@Qualifier注解⼀起使⽤(@Service注解必须写名字)。如下:public class TestServiceImpl { @Autowired@Qualifier(\"userDao\") private UserDao userDao; }@Resource@Resource默认按照ByName⾃动注⼊,由J2EE提供,需要导⼊包javax.annotation.Resource。@Resource有两个重要的属性:name和type,⽽Spring将@Resource注解的name属性解析为bean的名字,⽽type属性则解析为bean的类型。所以,如果使⽤name属性,则使⽤byName的⾃动注⼊策略,⽽使⽤type属性时则使⽤byType⾃动注⼊策略。如果既不制定name也不制定type属性,这时将通过反射机制使⽤byName⾃动注⼊策略。public class TestServiceImpl {// 下⾯两种@Resource只要使⽤⼀种即可 @Resource(name=\"userDao\") private UserDao userDao; // ⽤于字段上@Resource(name=\"userDao\")public void setUserDao(UserDao userDao) { // ⽤于属性的setter⽅法上 this.userDao = userDao; }}注:最好是将@Resource放在setter⽅法上,因为这样更符合⾯向对象的思想,通过set、get去操作属性,⽽不是直接去操作属性。
使⽤@Controller注解标识UserAction之后,就表⽰要把UserAction交给Spring容器管理,在Spring容器中会存在⼀个名字为\"userAction\"的action,这个名字是根据UserAction类名来取的。注意:如果@Controller不指定其value【@Controller】,则默认的bean名字为这个类的类名⾸字母⼩写,如果指定value【@Controller(value=\"UserAction\")】或者【@Controller(\"UserAction\")】,则使⽤value作为bean的名字。这⾥的UserAction还使⽤了@Scope注解,@Scope(\"prototype\")表⽰将Action的范围声明为原型,可以利⽤容器的scope=\"prototype\"来保证每⼀个请求有⼀个单独的Action来处理,避免struts中Action的线程安全问题。spring 默认scope 是单例模式(scope=\"singleton\"),这样只会创建⼀个Action对象,每次访问都是同⼀Action对象,数据不安全,struts2 是要求每次次访问都对应不同的Action,scope=\"prototype\" 可以保证当有请求的时候都创建⼀个Action对象
@Service
@Service对应的是业务层Bean,例如:
@Service(\"userService\")
public class UserServiceImpl implements UserService { ………}
@Service(\"userService\")注解是告诉Spring,当Spring要创建UserServiceImpl的的实例时,bean的名字必须叫做\"userService\",这样当Action需要使⽤UserServiceImpl的的实例时,就可以由Spring创建好的\"userService\",然后注⼊给Action:在Action只需要声明⼀个名字叫“userService”的变量来接收由Spring注⼊的\"userService\"即可,具体代码如下:
// 注⼊userService
@Resource(name = \"userService\") private UserService userService;
但现在⾃⼰不能主动去new“UserServiceImpl”类的实例,new“UserServiceImpl”类的实例的权⼒已经被Spring拿⾛了,只有Spring才能够new“UserServiceImpl”类的实例,⽽Action只能等Spring创建好“UserServiceImpl”类的实例后,再“恳求”Spring把创建好
的“UserServiceImpl”类的实例给他,这样他才能够使⽤“UserServiceImpl”,这就是Spring核⼼思想“控制反转”,也叫“依赖注⼊”,“依赖注⼊”也很好理解,Action需要使⽤UserServiceImpl⼲活,那么就是对UserServiceImpl产⽣了依赖,Spring把Acion需要依赖的
UserServiceImpl注⼊(也就是“给”)给Action,这就是所谓的“依赖注⼊”。对Action⽽⾔,Action依赖什么东西,就请求Spring注⼊给他,对Spring⽽⾔,Action需要什么,Spring就主动注⼊给他。
@Component
@Component泛指组件,当组件不好归类的时候,我们可以使⽤这个注解进⾏标注。
@Resource和@Autowired
@Resource和@Autowired都是做bean的注⼊时使⽤,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导⼊,但是Spring⽀持该注解的注⼊。1、共同点
两者都可以写在字段和setter⽅法上。两者如果都写在字段上,那么就不需要再写setter⽅法。2、不同点
@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使⽤按照名称(byName)来装配,可以结合@Qualifier注解⼀起使⽤(@Service注解必须写名字)。如下:
public class TestServiceImpl { @Autowired
@Qualifier(\"userDao\") private UserDao userDao; }
@Resource
@Resource默认按照ByName⾃动注⼊,由J2EE提供,需要导⼊包javax.annotation.Resource。@Resource有两个重要的属性:name和type,⽽Spring将@Resource注解的name属性解析为bean的名字,⽽type属性则解析为bean的类型。所以,如果使⽤name属性,则使⽤byName的⾃动注⼊策略,⽽使⽤type属性时则使⽤byType⾃动注⼊策略。如果既不制定name也不制定type属性,这时将通过反射机制使⽤byName⾃动注⼊策略。
public class TestServiceImpl {
// 下⾯两种@Resource只要使⽤⼀种即可 @Resource(name=\"userDao\") private UserDao userDao; // ⽤于字段上
@Resource(name=\"userDao\")
public void setUserDao(UserDao userDao) { // ⽤于属性的setter⽅法上 this.userDao = userDao; }}
注:最好是将@Resource放在setter⽅法上,因为这样更符合⾯向对象的思想,通过set、get去操作属性,⽽不是直接去操作属性。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo6.cn 版权所有 赣ICP备2024042791号-9
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务