Spring常用注解

1 Spring常用注解

从Jdk1.5 开始,Java 增加了对注解(Annotation)的支持,它是代码中的一种特殊标记,可以在编译、类加载和运行时被读取,执行相应的处理。开发人员可以通过注解在不改变原有代码和逻辑的情况下,在源代码中嵌入补充信息。
Spring 从 2.5 版本开始提供了对注解技术的全面支持,我们可以使用注解来实现自动装配,简化Spring 的 XML 配置。
咱就是说这个东西很重要啦,代替了xml文件!后期以注解为主,逐渐取代xml,偶尔使用xml。

1.1 准备工作

  1. xml中引入context约束
xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
  1. 开启注解属性的支持
<!-- 开启注解支持,指定扫描的包 -->
<context:component-scan base-package="com.spring.entity" />

1.2 属性注入的注解

  1. @Autowired 最常用!
    注入对象,将和属性名同名的Bean注入给该对象,也可以在set方法上加@Autowired注解。如果允许
    null值,可以设置它的 required 属性为 false。
@Autowired //将spring中标识为pet的bean自动注入该属性  无这个bean则报错 
private Pet pet;
@Autowired  //也可以写在set方法上  但不常用  一般写在属性上
public void setPet(Pet pet) {
this.pet = pet;
}
  1. @Qualifier
    @Qualifier不能单独使用,和@Autowired配合使用,定义bean的标识,注入java对象
@Autowired @Qualifier("cat")
private Pet pet;
@Autowired @Qualifier("dog")
public void setPet(Pet pet) {
this.pet = pet;
}
  1. @Resource
    注入Java对象,作用与 Autowired 相同,区别在于 @Autowired 默认按照 Bean 类型装配,而
    @Resource 默认按照 Bean 的名称进行装配。

@Resource不是Spring中的注解,是属于J2EE的,JDK9之后需要手动导入javax.annotation-api依

 <dependency>
            <groupId>javax.annotation</groupId>
            <artifactId>javax.annotation-api</artifactId>
            <version>1.3.2</version>
 </dependency>
@Resource(name="cat")
private Pet pet;
  1. @Value

注入简单数据类型(数字、字符、布尔值等)

@Value("金毛狮王")
private String name;
@Value("49")
private Integer age;

1.3 对象注入的注解

相当于:<bean id="" class="">

相关注解:
@Controller 用于标注控制层组件
@Service 用于标注业务层组件
@Repository 用于标注数据访问组件, 即 DAO 组件
@Component 泛指组件, 当组件不好归类的时候, 我们可以使用这个注解进行标注。
@Controller // 相当于创建一个标识为userController的Bean

@Controller // 相当于创建一个标识为userController的Bean
public class UserController {
}
@Service // 相当于创建一个标识为userServiceImpl的Bean
public class UserServiceImpl implements UserService {
}
@Component("user") // 指定Bean的标识
public class User {
}

1.4 设置Bean的作用域(了解)

@Scope

// 相当于配置文件中 <bean id="user" class="当前注解的类" scope="prototype" />
@Component("user")
@Scope("prototype") // 多实例
public class User {
	@Autowired
	private Cat cat;
}

1.5 生命周期相关(了解)

// 相当于:<bean id="" class="" init-method="initMethod" destroymethod="destroyMethod" />
@PostConstruct // 指定初始化方法
public void initMethod(){
	System.out.println("这是初始化的方法!");
}
@PreDestroy // 指定销毁方法
public void destroyMethod(){
	System.out.println("这是销毁的方法! ");
}

2 Spring纯注解配置

2.1 Spring纯注解配置

@Configuration

作用:
用于指定当前类是一个 spring 配置类,当创建容器时会从该类上加载注解。
获取容器时需要使用 AnnotationConfigApplicationContext(有@Configuration 注解的类.class)
细节:
当配置类作为AnnotationConfigApplicationContext对象创建的参数时,该注解可以不写。

/*
* @Configuration这个被Spring容器托管,注册到容器中,因为他本来就有一个@Component注解
* @Configuration代表这是一个配置类,相当于 xml文件。
* */
@Configuration
public class SpringConfig {

}

@ComponentScan

作用:
用于指定当前类是一个 spring 配置类,当创建容器时会从该类上加载注解。
获取容器时需要使用 AnnotationConfigApplicationContext(有@Configuration 注解的
类.class)。
细节:
当配置类作为AnnotationConfigApplicationContext对象创建的参数时,该注解可以不写。

@Configuration
@ComponentScan("com.spring.entity") // 扫描包路径
public class SpringConfig {
}

举例

@Component
public class Cat implements Pet {
@Value("咖啡猫")
private String name;
@Value("咖啡色")
private String color;
// getter和setter
@Override
public String showPetInfo() {
return "猫的名字:" + this.name + ",颜色:" + this.color;
}
}

@Test
public void testBoy() {
ApplicationContext context = new
AnnotationConfigApplicationContext(SpringConfig.class);
Cat cat = (Cat)context.getBean("cat");
System.out.println(cat.showPetInfo());
}

@Bean

作用:
该注解只能写在方法上,表明使用此方法创建一个对象,并且放入 spring 的IOC容器中。
属性:
name:给当前@Bean 注解方法创建的对象指定一个标识符,当不写时,默认值是当前方法的名称
细节:
当我们使用注解配置方法时,如果方法有参数,spring框架会去容器中查找和形参名称相同的bean对
象,查找的方式和Autowired注解是一样的。

利用@Bean注解,可以在SpringConfig配置类中生成bean对象:

@Configuration
public class SpringConfig {
@Bean("mao")
@Scope("prototype")
	public Cat getCat(){
	return new Cat("多啦A梦", "蓝色");
	}
	@Bean("gou")
	public Dog getDog(){
	return new Dog("旺财", "灰色");
	}
	@Bean("boy")
	public Boy getBoy(Pet mao){ // 获取表示为mao的bean,如果Spring容器中只有一个类型为
	PetBean,那么该形参名可以任意
	Boy boy = new Boy();
	boy.setName("小马");
	boy.setAge(20);
	boy.setPet(mao);
	return boy;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值