Spring系统学习--2注解汇总

2021-04-30 16:28

阅读:445

标签:control   prot   一模一样   string   单例   成功   div   lin   写法   

@Component:

 

/**
 * 原来在XML的配置
 * 
 *     
 * 
 * 上面原来在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.我们要提前创建了相应的配置文件:

技术图片

 2.我们在spring的xml配置文件里面添加如下注解:


    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{
...
}

使用上面注解配置的配置类,我们就不需要spring的xml配置文件了,那么我们怎么获取spring的容器呢?

 

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 {
...
}

Spring系统学习--2注解汇总

标签:control   prot   一模一样   string   单例   成功   div   lin   写法   

原文地址:https://www.cnblogs.com/luzhanshi/p/13227873.html


评论


亲,登录后才可以留言!