Spring注解@Componen、@Repository@Service、@Controller区别

合集下载

spring注解@Component、@Service等自动生成bean的命名规则

spring注解@Component、@Service等自动生成bean的命名规则

spring注解@Component、@Service等⾃动⽣成bean的命名规则参考链接:信息来源今天碰到⼀个问题,写了⼀个@Service的bean,类名⼤致为:CUserxml配置:<context:component-scan base-package="com.xxx.xx.x"/>结果启动报错:No bean named 'cUser' is defined,即找不到名为cUser的beanbean的名字不是我预期的"cUser",临时将bean的名字硬性指定成了cUser来解决的,即:@Service("cUser")在⽹上找了半天,看到有位兄弟说得很有道理,引⽤⼀下(以下内容引⽤⾃篇⾸链接):但还是觉得⽐较奇怪,之前⼀直以为Spring对注解形式的bean的名字的默认处理就是将⾸字母⼩写,再拼接后⾯的字符,但今天看来不是这样的。

回来翻了⼀下原码,原来还有另外的⼀个特殊处理:当类的名字是以两个或以上的⼤写字母开头的话,bean的名字会与类名保持⼀致/** * Derive a default bean name from the given bean definition.* <p>The default implementation simply builds a decapitalized version* of the short class name: e.g. "mypackage.MyJdbcDao" -> "myJdbcDao".* <p>Note that inner classes will thus have names of the form* "outerClassName.InnerClassName", which because of the period in the* name may be an issue if you are autowiring by name.* @param definition the bean definition to build a bean name for* @return the default bean name (never {@code null})*/protected String buildDefaultBeanName(BeanDefinition definition) {String shortClassName = ClassUtils.getShortName(definition.getBeanClassName());return Introspector.decapitalize(shortClassName);}/** * Utility method to take a string and convert it to normal Java variable* name capitalization. This normally means converting the first* character from upper case to lower case, but in the (unusual) special* case when there is more than one character and both the first and* second characters are upper case, we leave it alone.* <p>* Thus "FooBah" becomes "fooBah" and "X" becomes "x", but "URL" stays* as "URL".** @param name The string to be decapitalized.* @return The decapitalized version of the string.*/public static String decapitalize(String name) {if (name == null || name.length() == 0) {return name;} // 如果发现类的前两个字符都是⼤写,则直接返回类名if (name.length() > 1 && Character.isUpperCase(name.charAt(1)) &&Character.isUpperCase(name.charAt(0))){return name;} // 将类名的第⼀个字母转成⼩写,然后返回 char chars[] = name.toCharArray();chars[0] = Character.toLowerCase(chars[0]); return new String(chars);}。

Spring的四个基本注解ann...

Spring的四个基本注解ann...

Spring的四个基本注解ann...SpringMVC的四个基本注解annotation(控制层,业务层,持久层) -- @Component、@Repository @Service、@Controller SpringMVC中四个基本注解:@Component、@Repository @Service、@Controller看字面含义,很容易却别出其中三个:@Controller控制层,就是我们的action层@Service 业务逻辑层,就是我们的service或者manager 层@Repository持久层,就是我们常说的DAO层而@Component (字面意思就是组件),它在你确定不了事哪一个层的时候使用。

其实,这四个注解的效果都是一样的,Spring都会把它们当做需要注入的Bean加载在上下文中;但是在项目中,却建议你严格按照除Componen的其余三个注解的含义使用在项目中。

这对分层结构的web架构很有好处!!这里讲的是SpringMVC中这四个注解的作用,其实Srping中这四个注解的作用和SpringMVC一样.示例:1. 控制层@Controller // 注释为controller@RequestMapping("/login")public class LoginAction {@Autowired@Qualifier("userService") //注释指定注入 Beanprivate IUserService userService;。

其他略。

}2. 业务逻辑层@Service("userService")public class UserServiceImpl implements IUserService {@Autowired@Qualifier("userDao")private IUserDao userDao;。

聊聊注解@controller@service@component@repository的区别

聊聊注解@controller@service@component@repository的区别

聊聊注解@controller@service@component@repository的区别⽬录注解@controller@service@component@repository的区别命名不⼀样主要是为了区分类的作⽤和所属层级:Spring中的主要注解1.组件类注解@Component、@Repository、@Service、@Controller【创建注解】1.@Component标注为⼀个普通的springBean类2.@Repository标注为⼀个DAO层的组件类3.@Service标注为Service层(业务逻辑层)的组件类4.@Controller标注⼀个控制器组件类2.装配bean时常⽤注解@Autowired、@Resource【获取注解】2.1@Autowired【***常⽤】2.2@Resource(不属于spring的注解,是javax.annotation注解)2.3@Qualifier(不能单独使⽤)2.4@Autowired和@Qualifier的混合使⽤注解@controller@service@component@repository的区别查了⼀些⽹上的其他博客,发现⼏个注解本质上没有什么区别,⾄少在spring2.5版本⾥,这⼏个注解本质是⼀样的(当然,新的版本有什么变化⽬前还没细查)命名不⼀样主要是为了区分类的作⽤和所属层级:@Repository:持久层,⽤于标注数据访问组件,即DAO组件。

@Service:业务层,⽤于标注业务逻辑层主键。

@Controller:控制层,⽤于标注控制层组件。

@Component:当你不确定是属于哪⼀层的时候使⽤。

之所以区分开⼏种类型,⼀是spring想在以后的版本中为它们添加特殊技能,⼆是这种分层的做法使web架构更清晰,易读性与维护性更好。

/*** Indicates that an annotated class is a "Service", originally defined by Domain-Driven* Design (Evans, 2003) as "an operation offered as an interface that stands alone in the* model, with no encapsulated state."** <p>May also indicate that a class is a "Business Service Facade" (in the Core J2EE* patterns sense), or something similar. This annotation is a general-purpose stereotype* and individual teams may narrow their semantics and use as appropriate.** <p>This annotation serves as a specialization of {@link Component @Component},* allowing for implementation classes to be autodetected through classpath scanning.** @author Juergen Hoeller* @since 2.5* @see Component* @see Repository*/@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Componentpublic @interface Service {/*** The value may indicate a suggestion for a logical component name,* to be turned into a Spring bean in case of an autodetected component.* @return the suggested component name, if any*/String value() default "";}从@service的源码看,service仍然是使⽤了@Component注解(@Controller与@Repository与service⼀样,这⾥就不贴源码了)。

Spring注解@component、@service、@Autowired等作用与区别

Spring注解@component、@service、@Autowired等作用与区别

Spring注解@component、@service、@Autowired等作⽤与区别1、@Service⽤于标注业务层组件2、@Controller⽤于标注控制层组件(如struts中的action)3、@Repository⽤于标注数据访问组件,即DAO组件.4、@Component泛指组件,当组件不好归类的时候,我们可以使⽤这个注解进⾏标注。

5、@Autowired与@Resource的区别: @Autowired由Spring提供,只按照byType注⼊,默认情况下必须要求依赖对象存在,如果要允许null值,可以设置它的required属性为false。

如果想使⽤名称装配可以结合@Qualifier注解进⾏使⽤。

public class UserService {@Autowired@Qualifier(name="userDao1")private UserDao userDao;} @Resource由J2EE提供,默认按照byName⾃动注⼊,Spring将@Resource注解的name属性解析为bean的名字,type属性则解析为bean的类型。

所以如果使⽤name属性,则使⽤byName的⾃动注⼊策略,⽽使⽤type属性则使⽤byType⾃动注⼊策略。

①如果同时指定了name和type,则从Spring上下⽂中找到唯⼀匹配的bean进⾏装配,找不到则抛出异常。

②如果指定了name,则从上下⽂中查找名称(id)匹配的bean进⾏装配,找不到则抛出异常。

③如果指定了type,则从上下⽂中找到类似匹配的唯⼀bean进⾏装配,找不到或是找到多个,都会抛出异常。

④如果既没有指定name,⼜没有指定type,则⾃动按照byName⽅式进⾏装配;如果没有匹配,则回退为⼀个原始类型进⾏匹配,如果匹配则⾃动装配。

总结:@Resource的作⽤相当于@Autowired,只不过@Autowired按byType⾃动注⼊。

Spring常用的一些注解说明

Spring常用的一些注解说明

Spring常⽤的⼀些注解说明@Configuration从Spring3.0,@Configuration⽤于定义配置类,可替换xml配置⽂件,被注解的类内部包含有⼀个或多个被@Bean注解的⽅法。

这些⽅法将会被AnnotationConfigApplicationContext或AnnotationConfigWebApplicationContext类进⾏扫描,并⽤于构建bean定义。

@Bean@Bean注解⽤于告诉⽅法,产⽣⼀个Bean对象,然后这个Bean对象交给Spring管理。

产⽣这个Bean对象的⽅法Spring只会调⽤⼀次,随后这个Spring将会将这个Bean对象放在⾃⼰的IOC容器中。

SpringIOC 容器管理⼀个或者多个bean,这些bean都需要在@Configuration注解下进⾏创建,在⼀个⽅法上使⽤@Bean注解就表明这个⽅法需要交给Spring进⾏管理。

@Autowired、@Resource@Resource和@Autowired注解都是⽤来实现依赖注⼊的。

只是@AutoWried按by type⾃动注⼊,⽽@Resource默认按byName⾃动注⼊。

♣ @Autowired@Autowired具有强契约特征,其所标注的属性或参数必须是可装配的。

如果没有Bean可以装配到@Autowired所标注的属性或参数中,⾃动装配就会失败,抛出NoSuchBeanDefinitionException.@Autowired可以对类成员变量、⽅法及构造函数进⾏标注,让 spring 完成 bean ⾃动装配的⼯作。

@Autowired 默认是按照类去匹配,配合 @Qualifier 指定按照名称去装配 bean。

♣ @Resource@Resource是JDK提供的注解,有两个重要属性,分别是name和type。

@Resource依赖注⼊时查找bean的规则既不指定name属性,也不指定type属性,则⾃动按byName⽅式进⾏查找。

Spring源码——@Component,@Service是如何被解析?

Spring源码——@Component,@Service是如何被解析?

Spring源码——@Component,@Service是如何被解析?引⾔在Spring中,Component、Service是在⼯作中经常被使⽤到的注解,为了加深对Spring运⾏机制的理解,今天我们⼀起来看⼀下Spring中对Component等注解的处理⽅式Component注解源码在Component注解的源码中(已去掉多余⽆关内容)/*** Indicates that an annotated class is a "component".* Such classes are considered as candidates for auto-detection* when using annotation-based configuration and classpath scanning.*当使⽤基于注释的配置和类路径扫描时,此类将被视为⾃动检测的候选。

** <p>Other class-level annotations may be considered as identifying* a component as well, typically a special kind of component:* e.g. the {@link Repository @Repository} annotation or AspectJ's* 其他类级别的注释也可以被视为标识⼀个组件,通常是⼀种特殊的组件,,如Repository AspectJ注解* {@link ng.annotation.Aspect @Aspect} annotation.**/@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Indexedpublic @interface Component {/*** The value may indicate a suggestion for a logical component name,* to be turned into a Spring bean in case of an autodetected component.* @return the suggested component name, if any (or empty String otherwise)* 该值表明bean组件名称,以在⾃动检测到组件的情况下将其转换为Spring bean*/String value() default "";}上⾯第⼀段注释中其实已经告诉我们,Component 注解它是作为在基本注解⽅式配置Spring定义的时候,被其标注的类作为⾃动检测的候选对象通俗点讲就是,当使⽤Component-scan时,如果指定的包⾥⾯包含了被Component注解标识的类,其会被作为Spring bean对象,⾃动注册到Spring容器中。

springboot中@Mapper和@Repository的区别

springboot中@Mapper和@Repository的区别
@SpringBootApplication //添加启动类注解 @MapperScan("com.anson.dao") //配置mapper扫描地址 public源自class application {
public static void main(String[] args) {
SpringApplication.run(application.class,args); } }
网络错误503请刷新页面重试持续报错请尝试更换浏览器或网络环境
springboot中 @Mapper和 @Repository的区别
0--前 言
@Mapper和@Repository是常用的两个注解,两者都是用在dao上,两者功能差不多,容易混淆,有必要清楚其细微区别;
1--区 别
@Repository需要在Spring中配置扫描地址,然后生成Dao层的Bean才能被注入到Service层中:如下,在启动类中配置扫描地址:
@Mapper不需要配置扫描地址,通过xml里面的namespace里面的接口地址,生成了Bean后注入到Service层中。
也就是@Repository多了一个配置扫描地址的步骤;

SpringMVC常用注解@Controller,@Service,@repository。。。

SpringMVC常用注解@Controller,@Service,@repository。。。

SpringMVC常⽤注解@Controller,@Service,@repository。

SpringMVC常⽤注解@Controller,@Service,@repository,@Componentcontroller层使⽤@controller注解@Controller ⽤于标记在⼀个类上,使⽤它标记的类就是⼀个SpringMVC Controller 对象。

分发处理器将会扫描使⽤了该注解的类的⽅法。

通俗来说,被Controller标记的类就是⼀个控制器,这个类中的⽅法,就是相应的动作。

@RequestMapping是⼀个⽤来处理请求地址映射的注解,可⽤于类或⽅法上。

⽤于类上,表⽰类中的所有响应请求的⽅法都是以该地址作为⽗路径。

⽐如图⼀中,跳转到登录页⾯的路径就是localhost:8080/xxx-war/user/toLoginservice采⽤@service注解例:@Service("userService")注解是告诉,当Spring要创建UserServiceImpl的的实例时,bean的名字必须叫做"userService",这样当Action需要使⽤UserServiceImpl的的实例时,就可以由Spring创建好的"userService",然后注⼊给Action。

dao层使⽤@repository注解@Repository(value="userDao")注解是告诉Spring,让Spring创建⼀个名字叫“userDao”的UserDaoImpl实例。

当Service需要使⽤Spring创建的名字叫“userDao”的UserDaoImpl实例时,就可以使⽤@Resource(name = "userDao")注解告诉Spring,Spring把创建好的userDao注⼊给Service即可。

Spring核心注解

Spring核心注解

Spring注解使⽤场景启始版本模式注解@Repository数据仓储模式注解Spring Framework 2.0 @Component通⽤组件模式注解Spring Framework 2.5 @Service服务模式注解Spring Framework 2.5 @Controller Web控制器模式注解Spring Framework 2.5 @Configuration配置类模式注解Spring Framework 3.0装配注解@ImportResource替换XML元素<import>Spring Framework 2.5 @Import限定@Autowired依赖注⼊范围(导⼊对应的 @Configuration 标识类)Spring Framework 3.0 @ComponentScan扫描制定package下标注Spring模式注解的类Spring Framework 3.1依赖注⼊注解@Autowired Bean依赖注⼊,⽀持多种依赖查找⽅式Spring Framework 2.5 @Qualifier细粒度的@Autowired依赖查找⽅式Spring Framework 2.5 @Resource [JAVA注解]Bean依赖注⼊,仅⽀持名称依赖查找⽅式Spring Framework 2.5 Bean定义注解@Bean替换XML元素<bean/>Spring Framework 3.0 @DependsOn替换XML属性<bean depends-on="..."/>Spring Framework 3.0 @Lazy替代XML属性<bean lazy-init="true|false"/>Spring Framework 3.0 @Primary替换XML属性<bean primary="true|false"/>Spring Framework 3.0 @Role替换XML属性<bean role="..."/>Spring Framework 3.1 @Lookup替代XML属性<bean lookup-method="..."/>Spring Framework 4.1条件装配注解@Profile配置化条件装配Spring Framework 3.1 @Conditional编程条件装配Spring Framework 4.0配置属性注解@PropertySource配置属性抽象PropertySource注解Spring Framework 3.1 @PropertySources@PropertySource集合注解(实现 JAVA 8 @Repeatable相似的功能)Spring Framework 4.0⽣命周期回调注解@PostConstruct替换XML元素<bean init-method="..."/>或InitializingBean Spring Framework 2.5 @PreDestory替换XML元素<bean destory-method="..."/>或 DisposableBean Spring Framework 2.5注解属性注解@AliasFor别名注解属性,实现复⽤的⽬的Spring Framework 4.2性能注解@Indexed提升Spring模式注解的扫描效率(编译时会在classPath下⽣成 META-INF/ponents⽂件)Spring Framework 5.0Spring核⼼注解Spring核⼼注解归类如下:。

Spring中Bean管理的常用注解

Spring中Bean管理的常用注解

Spring中Bean管理的常⽤注解在Spring中,主要⽤于管理bean的注解分为四⼤类:1.⽤于创建对象。

2.⽤于给对象的属性注⼊值。

3.⽤于改变作⽤的范围。

4.⽤于定义⽣命周期。

这⼏个在开发中经常接触到,也可以说每天都会遇见。

其中创建对象是重点,Spring中创建对象的有四个:分别是@Component,@Controller,@Service,@Repository。

对于@Component注解:把资源让Spring来管理,相当于xml中的配置的Bean。

属性:value:指定Bean中的id。

如果不指定value属性,默认Bean的id是当前类的类名,⾸字母⼩写。

在开发中的场景是这样的,其实是在实现类中加⼊即可:@Component("customerService")public class CustomerServiceImpl implements CustomerService{public void save() {System.out.println("顾客保存⽅法");}}⽽其它的三个注解都是针对⼀个衍⽣注解,它们的作⽤及属性都是⼀模⼀样的。

只不过提供了更加明确的语义化。

@Controller:⼀般⽤于表现层的注解。

@Service:⼀般⽤于业务层的注解。

@responsitory:⼀般⽤于持久层的注解。

⽤法与以上相同,这⾥不做过多的解释。

要理解这个三个注解就是让标注类本⾝的⽤途清晰⽽已。

接下来,聊聊⽤于给对象的属性注⼊值得问题。

Spring给我们提出了注⼊数据的注解有:@Value,@Autowired,@Qualifier,@Resource。

其中@Value:注⼊基本数据类型和String类型数据,它的属性value⽤于指定值。

@Autowired这个⽤法是⽐较重要的,它能够⾃动按照类型注⼊。

当使⽤注解注⼊属性时,set⽅法可以省略。

Spring注解大全

Spring注解大全

Spring注解⼤全⼀、Spring bean注解1.1、@SpringBootApplication申明让spring boot⾃动给程序进⾏必要的配置,这个配置等同于:@Configuration ,@EnableAutoConfiguration 和 @ComponentScan 三个配置。

1.2、@Component泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使⽤@Component来标注这个类,把普通pojo实例化到spring容器中,相当于配置⽂件中的:<bean id="" class=""/>。

所以可以理解为@Component可以细化为@Reposity,@Service,@Controller。

@Component("conversionImpl")//其实默认的spring中的Bean id 为 conversionImpl(⾸字母⼩写)public class ConversionImpl implements Conversion {@Autowiredprivate RedisClient redisClient;}1.3、@ComponentScan@ComponentScan主要就是定义扫描的路径从中找出标识了需要装配的类⾃动装配到spring的bean容器中。

前⾯说到过@Controller注解,@Service,@Repository注解,它们其实都是组件,属于@Component注解,⽽@ComponentScan注解默认会装配标识了@Controller,@Service,@Repository,@Component注解的类到spring容器中。

//扫描com.demo下的组件@ComponentScan(value="com.demo")@Configurationpublic class myConfig {}1.4、@Service⼀般⽤于修饰service层的组件@Service()public class UserService{@Resourceprivate UserDao userDao;public void add(){userDao.add();}}1.5、@EnableAutoConfigurationSpringBoot⾃动配置(auto-configuration):尝试根据你添加的jar依赖⾃动配置你的Spring应⽤。

Spring的自动扫描注入

Spring的自动扫描注入

Spring注解@Component、@Repository、@Service、@Controller区别Spring 2.5 中除了提供@Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository、@Service 和@Controller。

在目前的Spring 版本中,这3 个注释和@Component 是等效的,但是从注释类的命名上,很容易看出这3 个注释分别和持久层、业务层和控制层(Web 层)相对应。

虽然目前这3 个注释和@Component 相比没有什么新意,但Spring 将在以后的版本中为它们添加特殊的功能。

所以,如果Web 应用程序采用了经典的三层分层结构的话,最好在持久层、业务层和控制层分别采用@Repository、@Service 和@Controller 对分层中的类进行注释,而用@Component 对那些比较中立的类进行注释。

在一个稍大的项目中,通常会有上百个组件,如果这些组件采用xml的bean定义来配置,显然会增加配置文件的体积,查找以及维护起来也不太方便。

Spring2.5为我们引入了组件自动扫描机制,他可以在类路径底下寻找标注了@Component,@Service,@Controller,@Repository注解的类,并把这些类纳入进spring容器中管理。

它的作用和在xml文件中使用bean节点配置组件时一样的。

要使用自动扫描机制,我们需要打开以下配置信息:Java代码1. <?xml version="1.0" encoding="UTF-8" ?> <beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans http://www.spring /schema/beans/spring-beans-2.5.xsd /sc hema/context /schema/context/spring-context-2.5.xsd"2. >3.4. <context:component-scan base-package=”com.eric.spring”>5. </beans>6. 其中base-package为需要扫描的包(含所有子包)@Service用于标注业务层组件,@Controller用于标注控制层组件(如struts中的action),@Repository用于标注数据访问组件,即DAO组件,而@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

Spring常用注解汇总

Spring常用注解汇总

Spring常用注解汇总本文汇总了Spring的常用注解,以方便大家查询和使用,具体如下:使用注解之前要开启自动扫描功能其中base-package为需要扫描的包(含子包)。

?1 <context:component-scan base-package="cn.test"/>@Configuration把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。

@Scope注解作用域@Lazy(true) 表示延迟初始化@Service用于标注业务层组件、@Controller用于标注控制层组件(如struts 中的action)@Repository用于标注数据访问组件,即DAO 组件。

@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

@Scope用于指定scope作用域的(用在类上)@PostConstruct用于指定初始化方法(用在方法上)@PreDestory用于指定销毁方法(用在方法上)@DependsOn:定义Bean初始化及销毁时的顺序@Primary:自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常@Autowired 默认按类型装配,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。

如下:@Autowired@Qualifier("personDaoBean") 存在多个实例配合使用@Resource默认按名称装配,当找不到与名称匹配的bean才会按类型装配。

@PostConstruct 初始化注解@PreDestroy 摧毁注解默认单例启动就加载@Async异步方法调用,需要添加以下代码:?1 2 3 <bean id="taskExecutor"class="org.springframework.scheduling.concurrent.Thread <property name="corePoolSize"value="10"/><property name="maxPoolSize"value="300"/></bean><task:annotation-driven/>45spring mvc常用的注解:个介绍。

spring注解支持

spring注解支持

spring注解⽀持Spring基于注解实现Bean定义⽀持如下三种注解:Spring⾃带的@Component注解及扩展@Repository、@Service、@ControllerJSR-250 1.1版本中中定义的@ManagedBean注解,是Java EE 6标准规范之⼀,不包括在JDK中,需要在应⽤服务器环境使⽤(如Jboss)JSR-330的@Named注解对应的Bean注⼊注解:Spring的@AutowiredJSR-250的@ResourceJSR-330的@InjectBean定义扫描:<context:component-scanbase-package=""resource-pattern="**/*.class"name-generator="org.springframework.context.annotation.AnnotationBeanNameGenerator"use-default-filters="true"annotation-config="true"><context:include-filter type="aspectj" expression=""/><context:exclude-filter type="regex" expression=""/></context:component-scan>base-package:表⽰扫描注解类的开始位置,即将在指定的包中扫描,其他包中的注解类将不被扫描,默认将扫描所有类路径;resource-pattern:表⽰扫描注解类的后缀匹配模式,即“base-package+resource-pattern”将组成匹配模式⽤于匹配类路径中的组件,默认后缀为“**/*.class”,即指定包下的所有以.class结尾的类⽂件;name-generator:默认情况下的Bean标识符⽣成策略,默认是AnnotationBeanNameGenerator,其将⽣成以⼩写开头的类名(不包括包名);可以⾃定义⾃⼰的标识符⽣成策略;use-default-filters:默认为true表⽰过滤@Component、@ManagedBean、@Named注解的类,如果改为false默认将不过滤这些默认的注解来定义Bean,即这些注解类不能被过滤到,即不能通过这些注解进⾏Bean定义;annotation-config:表⽰是否⾃动⽀持注解实现Bean依赖注⼊,默认⽀持,如果设置为false,将关闭⽀持注解的依赖注⼊,需要通过<context:annotation-config/>开启。

spring提供的常用注解

spring提供的常用注解

spring提供的常⽤注解spring常⽤注解⼀共5个:可以分为两类第⼀类: 声明组件类:@Component(通⽤,放哪⾥都可以)、@Controller、@Service、@ Repository 第⼆类: 注⼊类:@Resource 、@Autowired ⽤于注⼊详解:1、@Component:是所有受Spring 管理组件的通⽤形式2、@Controller:声明“表现层(Controller)”组件 @Controller @Scope("prototype")【⾮单利】 @Scope="singleton"【单利】 public class UserAction extends BaseAction<User>{ …… }3、@Service:声明“业务逻辑层(Service)”组件 @Service("userService")public class UserServiceImpl implements UserService { ……}4、@ Repository 声明“数据层Dao”组件 @Repository对应数据访问层Bean @Repository(value="userDao") public class UserDaoImpl extends BaseDaoImpl<User> { ……… }5、@Resource ⽤于注⼊(srping提供的) 默认按名称装配 @Autowired ⽤于注⼊,(srping提供的) 默认按类型装配 // 注⼊userService @Resource(name = "userService") private UserService userService;此上是我个⼈总结个⼀⼈意见忘⼤家能够佐证,感激不尽。

详解springmvc常用5种注解

详解springmvc常用5种注解

详解springmvc常⽤5种注解⼀、组件型注解:1、@Component 在类定义之前添加@Component注解,他会被spring容器识别,并转为bean。

2、@Repository 对Dao实现类进⾏注解 (特殊的@Component)3、@Service ⽤于对业务逻辑层进⾏注解, (特殊的@Component)4、@Controller ⽤于控制层注解, (特殊的@Component)以上四种注解都是注解在类上的,被注解的类将被spring初始话为⼀个bean,然后统⼀管理。

⼆、请求和参数型注解:1、@RequestMapping:⽤于处理请求地址映射,可以作⽤于类和⽅法上。

●value:定义request请求的映射地址●method:定义地request址请求的⽅式,包括【GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE.】默认接受get请求,如果请求⽅式和定义的⽅式不⼀样则请求⽆法成功。

●params:定义request请求中必须包含的参数值。

●headers:定义request请求中必须包含某些指定的请求头,如:RequestMapping(value = "/something", headers = "content-type=text/*")说明请求中必须要包含"text/html", "text/plain"这中类型的Content-type头,才是⼀个匹配的请求。

●consumes:定义请求提交内容的类型。

●produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回@RequestMapping(value="/requestTest.do",params = {"name=sdf"},headers = {"Accept-Encoding=gzip, deflate, br"},method = RequestMethod.GET) public String getIndex(){System.out.println("请求成功");return "index";}上⾯代码表⽰请求的⽅式为GET请求,请求参数必须包含name=sdf这⼀参数,然后请求头中必须有 Accept-Encoding=gzip, deflate, br这个类型头。

Spring5:@Autowired注解、@Resource注解和@Service注解

Spring5:@Autowired注解、@Resource注解和@Service注解

Spring5:@Autowired注解、@Resource注解和@Service注解什么是注解传统的Spring做法是使⽤.xml⽂件来对bean进⾏注⼊或者是配置aop、事物,这么做有两个缺点:1、如果所有的内容都配置在.xml⽂件中,那么.xml⽂件将会⼗分庞⼤;如果按需求分开.xml⽂件,那么.xml⽂件⼜会⾮常多。

总之这将导致配置⽂件的可读性与可维护性变得很低2、在开发中在.java⽂件和.xml⽂件之间不断切换,是⼀件⿇烦的事,同时这种思维上的不连贯也会降低开发的效率为了解决这两个问题,Spring引⼊了注解,通过"@XXX"的⽅式,让注解与Java Bean紧密结合,既⼤⼤减少了配置⽂件的体积,⼜增加了Java Bean的可读性与内聚性。

本篇⽂章,讲讲最重要的三个Spring注解,也就是@Autowired、@Resource和@Service,希望能通过有限的篇幅说清楚这三个注解的⽤法。

不使⽤注解先看⼀个不使⽤注解的Spring⽰例,在这个⽰例的基础上,改成注解版本的,这样也能看出使⽤与不使⽤注解之间的区别,先定义⼀个⽼虎:public class Tiger{private String tigerName = "TigerKing";public String toString(){return "TigerName:" + tigerName;}}再定义⼀个猴⼦:public class Monkey{private String monkeyName = "MonkeyKing";public String toString(){return "MonkeyName:" + monkeyName;}}定义⼀个动物园:public class Zoo{private Tiger tiger;private Monkey monkey;public void setTiger(Tiger tiger){this.tiger = tiger;}public void setMonkey(Monkey monkey){this.monkey = monkey;}public Tiger getTiger(){return tiger;}public Monkey getMonkey(){return monkey;}public String toString(){return tiger + "\n" + monkey;}}spring的配置⽂件这么写:<?xml version="1.0" encoding="UTF-8"?><beans xmlns:xsi="/2001/XMLSchema-instance"xmlns="/schema/beans"xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-4.2.xsd/schema/context/schema/context/spring-context-4.2.xsd"default-autowire="byType"><bean id="zoo" class="com.xrq.bean.Zoo"><property name="tiger" ref="tiger"/><property name="monkey" ref="monkey"/></bean><bean id="tiger" class="com.xrq.domain.Tiger"/><bean id="monkey" class="com.xrq.domain.Monkey"/></beans>都很熟悉,权当复习⼀遍了。

spring-)@Component @Scope @Repository、@Service 和 @Controller

spring-)@Component @Scope @Repository、@Service 和 @Controller

spring2.5注解驱动(三)@Component @Scope @Repository、@Service 和@Controller spring 2010-07-19 21:54:45 阅读401 评论0 字号:大中小订阅使用@Component虽然我们可以通过@Autowired 或@Resource 在Bean 类中使用自动注入功能,但是Bean 还是在XML 文件中通过<bean> 进行定义——也就是说,在XML 配置文件中定义Bean,通过@Autowired 或@Resource 为Bean 的成员变量、方法入参或构造函数入参提供自动注入的功能。

能否也通过注释定义Bean,从XML 配置文件中完全移除Bean 定义的配置呢?答案是肯定的,我们通过Spring 2.5 提供的@Component 注释就可以达到这个目标了。

package com.baobaotao;import ponent;@Componentpublic class Car {…}package com.baobaotao;import ponent;@Componentpublic class Office {private String officeNo = "001" ;…}package com.baobaotao;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Required;import org.springframework.beans.factory.annotation.Qualifier;import ponent;@Component ( "boss" )public class Boss {@Autowiredprivate Car car;@Autowiredprivate Office office;…}@Component 有一个可选的入参,用于指定Bean 的名称,在Boss 中,我们就将Bean 名称定义为“boss”。

@Repository注解的作用

@Repository注解的作用

@Repository注解的作用
@Repository和@Controller、@Service、@Component的作用差不多,都是把对象交给spring管理。

@Repository用在持久层的接口上,这个注解是将接口的一个实现类交给spring管理。

为什么有时候我们不用@Repository来注解接口,我们照样可以注入到这个接口的实现类呢?
1、spring配置文件中配置了MapperScannerConfigurer这个bean,它会扫描持久层接口创建实现类并交给spring管理。

2、接口上使用了@Mapper注解或者springboot中主类上使用了@MapperScan注解,和MapperScannerConfigurer作用一样。

注:不使用@Repository注解,idea会报警告,提示找不到这个bean,直接忽略即可。

@Repository的作用:
这是因为该注解的作用不只是将类识别为Bean,同时它还能将所标注的类中抛出的数据访问异常封装为 Spring 的数据访问异常类型。

Spring本身提供了一个丰富的并且是与具体的数据访问技术无关的数据访问异常结构,用于封装不同的持久层框架抛出的异常,使得异常独立于底层的框架。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Spring 2.5 中除了提供@Component 注释外,还定义了几个拥有特殊语义的注释,它们分别是:@Repository、@Service 和@Controller。

在目前的Spring 版本中,这3 个注释和@Component 是等效的,但是从注释类的命名上,很容易看出这 3 个注释分别和持久层、业务层和控制层(Web 层)相对应。

虽然目前这 3 个注释和@Component 相比没有什么新意,但Spring 将在以后的版本中为它们添加特殊的功能。

所以,如果Web 应用程序采用了经典的三层分层结构的话,最好在持久层、业务层和控制层分别采用@Repository、@Service 和@Controller 对分层中的类进行注释,而用@Component 对那些比较中立的类进行注释。

在一个稍大的项目中,通常会有上百个组件,如果这些组件采用xml的bean定义来配置,显然会增加配置文件的体积,查找以及维护起来也不太方便。

Spring2.5为我们引入了组件自动扫描机制,他可以在类路径底下寻找标注了@Component,@Service,@Controller,@Repository注解的类,并把这些类纳入进spring容器中管理。

它的作用和在xml文件中使用bean节点配置组件时一样的。

要使用自动扫描机制,我们需要打开以下配置信息:Java代码1. <?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="/schema/beans" xmlns:xsi="/2001/XMLSchema-instance"xmlns:context="/schema/context"xsi:schemaLocation="/schema/beans/schema/beans/spring-beans-2.5.xsd/schema/context/schema/context/spring-context-2.5.xsd"2. >3.4. <context:component-scan base-package=”com.eric.spring”>5. </beans>6. 其中base-package为需要扫描的包(含所有子包)@Service用于标注业务层组件,@Controller用于标注控制层组件(如struts中的action),@Repository用于标注数据访问组件,即DAO组件,而@Component 泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

7. @Service public class VentorServiceImpl implements iVentorService {8. } @Repository public class VentorDaoImpl implements iVentorDao {9. } getBean的默认名称是类名(头字母小写),如果想自定义,可以@Service(“aaaaa”)这样来指定,这种bean默认是单例的,如果想改变,可以使用@Service(“beanName”) @Scope(“prototype”)来改变。

可以使用以下方式指定初始化方法和销毁方法(方法名任意):@PostConstruct public void init() {10. }11. @PreDestroy public void destory() {12. }注入方式:把DAO实现类注入到service实现类中,把service的接口(注意不要是service的实现类)注入到action中,注入时不要new 这个注入的类,因为spring会自动注入,如果手动再new的话会出现错误,然后属性加上@Autowired后不需要getter()和setter()方法,Spring也会自动注入。

至于更具体的内容,等对注入的方式更•注册注解处理器•方式一:bean<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>•方式二: 命名空间<context:annotation-config /><context:annotationconfig /> 将隐式地向Spring 容器注册AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor 、 PersistenceAnnotationBeanPostProcessor 以及RequiredAnnotationBeanPostProcessor 这4 个BeanPostProcessor 。

•方式三: 命名空间<context:component-scan />如果要使注解工作,则必须配置component-scan ,实际上不需要再配置annotation-config。

base-package 属性指定了需要扫描的类包,类包及其递归子包中所有的类都会被处理。

还允许定义过滤器将基包下的某些类纳入或排除。

• Spring 支持以下4 种类型的过滤方式:•注解 org.example.SomeAnnotation 将所有使用SomeAnnotation 注解的类过滤出来•类名指定 org.example.SomeClass 过滤指定的类•正则表达式 com.kedacom.spring.annotation.web..* 通过正则表达式过滤一些类• AspectJ 表达式 org.example..*Service+ 通过AspectJ 表达式过滤一些类•正则表达式的过滤方式举例:<context:component-scanbase-package="com.casheen.spring.annotation"><context:exclude-filtertype="regex"expression="com.casheen.spring.annotation.web..*"/></context:component-scan>•注解的过滤方式举例:<context:component-scan base-package="qin" ><context:include-filter type="annotation"expression="org.springframework.stereotype.Controller"/><context:include-filter type="annotation"expression="org.springframework.stereotype.Service"/><context:include-filter type="annotation"expression="org.springframework.stereotype.Repository"/></context:component-scan>注解:注解介绍• @Controller• @Service• @Autowired• @RequestMapping• @RequestParam• @ModelAttribute• @Cacheable• @CacheFlush• @Resource• @PostConstruct• @PreDestroy• @Repository• @Component (不推荐使用)• @Scope• @SessionAttributes• @InitBinder@Controller•例如@Controllerpublic class SoftCreateController extends SimpleBaseController {}•或者@Controller("softCreateController")•说明@Controller 负责注册一个bean 到spring 上下文中,bean 的ID 默认为类名称开头字母小写@Service•例如@Servicepublic class SoftCreateServiceImpl implements ISoftCreateService {}•或者@Service("softCreateServiceImpl")•说明@Service 负责注册一个bean 到spring 上下文中,bean 的ID 默认为类名称开头字母小写@Autowired•例如@Autowiredprivate ISoftPMService softPMService;•或者@Autowired(required=false)private ISoftPMService softPMService = new SoftPMServiceImpl();•说明@Autowired 根据bean 类型从spring 上线文中进行查找,注册类型必须唯一,否则报异常。

与@Resource 的区别在于,@Resource 允许通过bean 名称或bean 类型两种方式进行查找@Autowired(required=false) 表示,如果spring 上下文中没有找到该类型的bean 时,才会使用new SoftPMServiceImpl();@RequestMapping•类@Controller@RequestMapping("/bbtForum.do")public class BbtForumController {@RequestMapping(params = "method=listBoardTopic")public String listBoardTopic(int topicId,User user) {}}•方法@RequestMapping("/softpg/downSoftPg.do")@RequestMapping(value="/softpg/ajaxLoadSoftId.do",method = POST)@RequestMapping(value = "/osu/product/detail.do", params = { "modify=false" }, method =POST)•说明@RequestMapping 可以声明到类或方法上•参数绑定说明如果我们使用以下的 URL 请求:http://localhost/bbtForum.do?method=listBoardTopic&topicId=1&userId=10&userName=tom topicId URL 参数将绑定到 topicId 入参上,而 userId 和 userName URL 参数将绑定到 user 对象的 userId 和 userName 属性中。

相关文档
最新文档