spring常用注解

注解

注解驱动:

利用spring提供的注解替代掉xml文件中做的配置,干的活都是一样的

1.bean的定义

@Controller:一边用于表现层注解
@Service:一般用于业务层注解
@Repository:一般用于持久层注解
@Component:用于其他

作用:设置***该类***为spring管理的bean

相关属性:value:定义bean的访问id

示例:

@Component
public class user{}
2.bean的作用域

@Scope:设置该类作为bean对应的scope属性,默认为singleton
//@scope默认是单例模式(singleton)即:@scope(“singleton”)
//1.singleton单例模式,全局有且仅有一个实例
//2.prototype原型模式,每次获取Bean的时候会有一个新的实例

3.bean的生命周期

@PostConstruct:设定bean的生命周期-新建
@PreDestroy:设定bean的生命周期-销毁

依赖资源:

dependency>
    <groupId>javax.annotation</groupId>
    <artifactId>jsr250-api</artifactId>
    <version>1.0</version>
</dependency>
@Bean

作用:设置***该方法***的返回值作为spring管理的bean

示例:

@Bean("dataSource")
private DruidDataSource getdataSource(){
    DruidDataSource ds = new DruidDataSource();
    ds.setDriverClassName(driver);
    ds.setUrl(url);
    ds.setUsername(username);
    ds.setPassword(password);
    return ds;
}
非引用类型注入

@Value:设置对应属性的值或对方法进行传参

说明:
1.value值仅支持非引用类型数据,赋值时对方法的所有参数全部赋值
2.value值支持读取properties文件中的属性值,通过类属性将properties中数据传入类中
3.value值支持SpEL
4.@value注解如果添加在属性上方,可以省略set方法(set方法的目的是为属性赋值)

示例:

@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
引用类型注入

@Autowired:按类型装配
@Qualifier:指定自动装配的bean的id
@Resource :可以替代掉 @Autowired @Qualifier 但是不推荐使用

属性:
name:设置注入的bean的id
type:设置注入的bean的类型,接收的参数为Class类型
什么属性不指定, 默认按照类型注入

示例:

@Autowired(required = false)
@Qualifier("userDao")
private UserDao userDao;
引用类型属性注入

@Primary:设置类对应的bean按类型装配时优先装配

@Autowired默认按类型装配,当出现相同类型的bean,使用@Primary提高按类型自动装配的优先级,多个@Primary 会导致优先级设置无效

示例:

@Primary
public class ClassName{}
加载properties文件

@PropertySource:加载properties文件中的属性值

示例:

@PropertySource(value = {"classpath:filename.properties","classpath:abc.properties"},ignoreResourceNotFount = truepublic class UserDao{}

纯注解驱动

@Configuration、@ComponentScan:设置当前类为spring核心配置加载类, 替代掉applicationContext.xml

核心配合类用于替换spring核心配置文件,此类可以设置空的,不设置变量与属性
bean扫描工作使用注解@ComponentScan替代

示例:

@Configuration
@ComponentScan("包名")
public class SpringConfig{
}
第三方bean配置与管理

@Import:导入@Bean 所在的类

@Import注解在同一个类上,仅允许添加一次,如果需要导入多个,使用数组的形式进行设定
在被导入的类中可以继续使用@Import导入其他资源
@Bean所在的类可以使用导入的形式进入spring容器,无需声明为bean

示例:

@Import({JDBCConfig.class})
@Configuration
@ComponentScan("包名")
public class SpringConfig{
}
//被导入的类
public class JDBCConfig{
	@Bean("dataSource")
	private DruidDataSource getdataSource(){
    		DruidDataSource ds = new DruidDataSource();
    		ds.setDriverClassName(driver);
    		ds.setUrl(url);
    		ds.setUsername(username);
    		ds.setPassword(password);
    		return ds;
	}
}
bean加载控制

@DependsOn(“其他beanid”):控制bean的加载顺序,使其指定bean加载完毕后再加载

注意:
1、Spring管理的bean默认都是单例模式(singleton)
2、实例化对象应该顺序化的,比如A依赖B,B依赖C,C依赖D…
3、一个bean可以依赖多个bean,可以通过逗号(",")来定义多个依赖对象

示例:

@DependsOn("beanId1,beanId2,beanId3")
public class SpringConfig{
}

@Order(“数字”):控制@Configuration修饰类的加载顺序

注意:
1.@Order 的数字值 越大优先级越低,例如 1 的优先级大于
2.优先级越大的类中 @bean 修饰的方法优先注入

@Order(1)
public class SpringConfig{
}

@Lazy:控制bean的加载时机,使其延迟加载

注意:
1)用于指定单例bean实例化的时机,在没有指定此注解时,单例会在容器初始化时就被创建。而当使用此注解后,单例对象的创建时机会在该bean在被第一次使用时创建,并且只创建一次。第二次及以后获取使用就不再创建。
2)在实际开发场景中,并不是所有bean都要一开始就被创建的,有些可以等到使用时才创建。此时就可以使用该注解实现。
3)此注解只对单例bean有用,原型bean时此注解不起作用。

示例:

@Component
@Lazy
public class UserService{
	public UserService(){
		System.out.println("userService创建了")
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值