Spring系统学习--2注解汇总
2021-04-30 16:28
标签:control prot 一模一样 string 单例 成功 div lin 写法 2.我们在spring的xml配置文件里面添加如下注解: 测试: 使用上面注解配置的配置类,我们就不需要spring的xml配置文件了,那么我们怎么获取spring的容器呢? Spring系统学习--2注解汇总 标签:control prot 一模一样 string 单例 成功 div lin 写法 原文地址:https://www.cnblogs.com/luzhanshi/p/13227873.html@Component:
/**
* 原来在XML的配置
*
/**
@Component:
* 作用:就相当于在spring的xml配置文件中写了一个bean标签。
* 属性:
* value:用于指定bean的id。当不写时,默认值是当前类名,首字母改小写。例如:accountServiceImpl
* 由此注解衍生的三个注解:
* @Controller:一般用于表现层
* @Service:一般用于业务层
* @Repository:一般用于持久层
* 他们的作用以及属性和@Component的作用是一模一样的。他们的出现是spring框架为我们提供更明确的语义化来指定不同层的bean对象。
*/
//@Component(value = "IAccountService_annotation")
//@Service(value = "IAccountService_annotation")
@Repository(value = "IAccountService_annotation")
public class IAccountService_annotationImpl implements IAccountService_annotation {
...
}
@Autowired,@Qualifier, @Resource
/**
@Autowired
* 作用:自动按照类型注入。只要容器中有唯一的类型匹配,则可以直接注入成功。如果没有匹配的类型就报错。
* 如果有多个类型匹配时,会先按照类型找到符合条件的对象,然后再用变量名称作为bean的id,从里面继续查找,如果找到仍然可以注入成功,如果没有匹配的id,就报错
* 细节:当使用此注解注入时,set方法就可以省略了。
* 属性:
* required:是否必须注入成功。取值是true(默认值)/false。当取值是true时,没有匹配的对象就报错。
* @Qualifier作用:在自动按照类型(@Autowired)注入的基础之上,再按照bean的id注入。在给类成员注入时,它不能够浊立使用。
* 属性:
* value:用于指定bean的id。
* @Resource作用:直接按照bean的id注入。
* 属性:
* name:用于指定bean的id。
* 以上3个注解,都只能用于注入其他bean类型,而不能注入基本类型和String。
**/
@Component(value = "IAccountService_annotation")
public class IAccountService_annotationImpl implements IAccountService_annotation {
//@Autowired
//@Qualifier(value = "dao")
@Resource(name = "dao")
private IAccountDao_annotation iAccountDao_annotation;
/* public void setiAccountDao_annotation(IAccountDao_annotation iAccountDao_annotation) {
this.iAccountDao_annotation = iAccountDao_annotation;
}*/
@Override
public void saveAccount() {
iAccountDao_annotation.save();
}
}
@Value:
/**
@Value作用:用于注入基本类型和String类型的数据。
属性:
value:用于指定要注入的数据。它支持使用spring的el表达式。
spring的el表达式写法:
${表达式}
**/
@Repository(value = "IAccountService_annotation")
public class IAccountService_annotationImpl implements IAccountService_annotation {
@Value("https://www.hao123.com/")
public String url;
@Value("${jdbc.driver}")
private String driver;
@Override
public void saveAccount() {
System.out.println(url);//https://www.hao123.com/
System.out.println(driver);//com.mysql.jdbc.Driver;
iAccountDao_annotation.save();
}
}
spring的el表达式的使用前提是:
1.我们要提前创建了相应的配置文件:
context:property-placeholder location="dataBaseConfig.properties">context:property-placeholder>
@Scope
/**
三,用于改变作用范围:
* @Scope
* 作用:用于改变bean的作用范围。范围的取值和xml中的配置是一样的(单例:singleton;多例:prototype)
* 属性:
* value:用于指定范围。
**/
@Component(value = "IAccountService_annotation")
@Scope("prototype")//多例(默认情况是单例)
public class IAccountService_annotationImpl implements IAccountService_annotation {
...
}
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("bean_annotation.xml");
IAccountService_annotation annotation = context.getBean("IAccountService_annotation", IAccountService_annotation.class);
IAccountService_annotation annotation2 = context.getBean("IAccountService_annotation", IAccountService_annotation.class);
System.out.println(annotation==annotation2);//false
}
@PostContruct,@PreDestroy
/**
* 四,和生命周期相关的:
* @PostContruct
* 作用:用于指定初始化方法。和配置文件中init-method属性是一样的
* @PreDestroy
* 作用:用于指定销毁方法。和配置文件中destroy-method属性是一样的
*/
@Component(value = "IAccountService_annotation")
@Scope("singleton")
public class IAccountService_annotationImpl implements IAccountService_annotation {
@PostConstruct
public void init(){
System.out.println("对象初始化了");
}
@PreDestroy
public void destory(){
System.out.println("对象销毁了");
}
}
@Configuration
@Configuration//它就相当于表明当前类是spring的配置类,如果只是写到AnnotationConfigApplicationContext构造函数中的字节码,可以不写。//如果是加载要扫描的包时,需要读到此类的配置,同时又没把此类的字节码提供给AnnotafionConfigApplicationContext构造函数,则必须写。
@ComponentScan("com.dao")//指定创建容器时要扫描的包
public class Springconfiguration{
...
}
private ApplicationContext ac=new AnnotationConfigApplicationContext(SpringConfiguration. class);//可以接受多个配置类的class字节码对象
@Import
@ComponentScan("com.all")//指定创建容器时要扫描的包
@Import(JdbcConfig.class)//用于导入其他的配置类
public class Springconfiguration{
...
}
@Bean
/**
*@Bean注解:
*作用:把当前方法的返回值作为bean对象存入spring容器之中。
*属性:
*name:用于指定bean的id。如果没该属性的话,默认值是当前的方法名。
*Spring框架给带有bean注解的方法创建对象时,如果方法有参数,会用方法参数的数据类型前往容器中查找。
*如果能找到唯一的一个类型匹配,则直接给方法的参数注入。
*如果找不到,就报错
*如果找到多个,就需要借助@Qualifier注解,此时它可以独立使用
*/
/**只有一个同类(DataSource )bean对象的情况下
@Bean(name="dbAssit‘")
public DBAssit createDBAssit(DataSource dataSource){
return new DBAssit(dataSource);
}
**/
/**多个同类(DataSource )bean对象的情况下**/
@Bean(name="dbAssit")
public DBAssit createDBAssit(@Qualifier("ds1)Datasource dataSource){
return new DBAssit(dataSource);
}
/**
*创建数据源
*/
@Bean(name="ds1")
public DataSource createDataSource1(){
try{
ComboPooledDataSource ds=new ComboPooledDataSource();
ds.setDriverClass("com.mysq1.jdbc.Driver");
ds.set]dbcUr1("jdbc:mysq1://localhost:3306/spring5");
ds.setUser("root");
ds.setPassword("1234");
return ds;
}catch(Exception e){
throw new RuntimeException(e);
}
}
@Bean(name="ds2")
public DataSource createDataSource1(){
try{
ComboPooledDataSource ds=new ComboPooledDataSource();
...
return ds;
}catch(Exception e){
throw new RuntimeException(e);
}
}
@PropertySource
|@ComponentScan("com.all")//指定创建容器时要扫描的包
@Import(JdbcConfig.class)/用于导入其他的配置类
@PropertySource("classpath:config/jdbcConfig.properties")//配置要添加到spring容器的配置文件的位置
public class Springconfiguration{
}
@Component:
* 作用:就相当于在spring的xml配置文件中写了一个bean标签。
* 属性:
* value:用于指定bean的id。当不写时,默认值是当前类名,首字母改小写。例如:accountServiceImpl
* 由此注解衍生的三个注解:
* @Controller:一般用于表现层
* @Service:一般用于业务层
* @Repository:一般用于持久层
* 他们的作用以及属性和@Component的作用是一模一样的。他们的出现是spring框架为我们提供更明确的语义化来指定不同层的bean对象。
*/
//@Component(value = "IAccountService_annotation")
//@Service(value = "IAccountService_annotation")
@Repository(value = "IAccountService_annotation")
public class IAccountService_annotationImpl implements IAccountService_annotation {
...
}