Spring的一些常用注解

@Component

@Component          //默认bean ID是将类名的第一个字母变为小写
@Component("test")  //指定bean ID

表明该类会作为组件类,并告知Spring要为这个类创建bean。

@Named

@Named
@Named("test")

@Named是Java依赖注入规范中提供的。Spring支持将@Named作为@Component注解的替代方案。两者之间有一些细微的差异,但是在大多数场景中,它们是可以相互替换的。

@Controller

@Controller
@Controller("testController")

@Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法。

@Service

@Service
@Service("testService")

@Service注解:用于标注业务层组件

@Repository

@Repository
@Repository("testRepository")

@Repository注解:用于标注数据访问组件,即DAO组件

@ComponentScan


@ComponentScan      //如果没有其它配置的话,@ComponentScan默认会扫描与配置类相同的包。
@ComponentScan("包名")
@ComponentScan(basePackages="包名")//更加清晰的表明设置的是基础包
@ComponentScan(basePackages={"包名","包名"})//设置多个基础包,basePackages属性设置为要扫描包的一个数组
@ComponentScan(basePackageClasses={class,class})//basePackageClasses属性所设置的数组中包含了类。这些类所在的包将会作为组件扫描的基础包。

组件扫描,如果没有其它配置的话,@ComponentScan默认会扫描与配置类相同的包。

@AutoWired

@AutoWired  //自动装配
@AutoWired(required=false)//设置为false时,Spring会尝试执行自动装配,但是如果没有匹配的bean的话,Spring将会让这个bean处于未装配的状态。

@AutoWired注解可以用在类的任何方法上。是Spring特有的注解。

@Inject

@Inject

@Inject是Java依赖注入规范中提供的。Spring同时支持@Inject与@AutoWired。两者之间有一些细微的差异,但是在大多数场景中,它们是可以相互替换的。

@Configuration

@Configuration

表明这是一个配置类。

@ContextConfiguration

@ContextConfiguration(classes=config.class)

加载配置文件。

@Import

@Import(config.class)

导入配置类。

@ImportResource

@ImportResource("classpath:config.xml")

加载XML配置文件。

@Primary与@Qualifier

@Autowired
public void setDessert(Dessert dessert)
{
   this.dessert = dessert;
}
@Component
public class Cake implements Dessert {...}

@Component
public class Cookies implements Dessert {...}

@Component
public class IceCream implements Dessert {...}

Spring自动装配时,不知道选哪一个,只好宣告失败并抛出异常。因为它们都实现了Dessert接口。
这时我们可以将其中的 一个bean设置为首选的bean。

@Primary
@Component
public class Cake implements Dessert {...}

但是,如果你标示了两个或更多的首选bean,那么它就无法正常工作了。
这时,我们可以通过Spring的限定符在所有可选的bean上进行缩小范围的操作,最终能够达到只有一个bean满足所规定的条件。
@Qualifier注解是使用限定符的主要方式。它可以与@Autowired和@Inject一起使用。

@Autowired
@Qualifier("iceCream ")  //参数就是想要注入的bean的ID。
public void setDessert(Dessert dessert)
{
   this.dessert = dessert;
}

同时我们可以为bean设置自己的限定符。

@Component
@Qualifier("cold")
public class IceCream implements Dessert {...}

在注入的地方,只要引用cold限定符就可以了。

@Autowired
@Qualifier("cold")  //引用自己设置的限定符
public void setDessert(Dessert dessert)
{
   this.dessert = dessert;
}

假设我们现在有两个bean都带有”cold“限定符。自动装配时,Spring又会不知道怎么选择。

@Component
@Qualifier("cold") 
public class Cookies implements Dessert {...}

@Component
@Qualifier("cold") 
public class IceCream implements Dessert {...}

可能想到的解决方案就是再添加以个@Qualifier注解。

@Component
@Qualifier("cold") 
@Qualifier("IceCream") 
public class IceCream implements Dessert {...}

注入的时候,通过如下方式缩小范围:

@Autowired
@Qualifier("cold")    //引用自己设置的限定符
@Qualifier("IceCream")//引用自己设置的限定符
public void setDessert(Dessert dessert)
{
   this.dessert = dessert;
}

但是Java不允许在同一条目上重复出现相同类型的多个注解。这时我们将不在使用@Qualifier(“cold”),而是使用自定义的@cold注解。

@Target({ElementType.CONSTRUCTOR,ElementType.FIELD,ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface Cold {}

@Target({ElementType.CONSTRUCTOR,ElementType.FIELD,ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface IceCream{}

注入时:

@Autowired
@Cold
@IceCream
public void setDessert(Dessert dessert)
{
   this.dessert = dessert;
}

通过声明自定义的限定符注解,我们可以同时使用多个限定符。
可以把@Qualifier看成一个修饰词。
先写到这吧。比较匆忙,后续慢慢修改更新…….

猜你喜欢

转载自blog.csdn.net/z1790424577/article/details/80797308