Spring学习六-注解IOC

基本配置

@Component 注解是用于创建bean对象的,但是只使用@Component注解是无法使用的,需要在配置文件中去声明,告知spring在创建容器时要扫描的包,配置所需要的标签不是在bean的约束中,而是一个mingcheng为context名称空间和约束中

<context:component-scan base-package="com.how2java.pojo"/>

且在beans的头信息中需要导入如下信息

xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"

详解:

用于创建bean对象的

他们的作用就和xml配置文件中编写一个bean标签实现的功能是一样的
@Component
作用:用于把当前的对象放入到spring容器中。
属性:
value:用于指定bean的id,如果不写beanname默认是当前类名,首字母小写。
Controller:一般用于表现层
Service:一般用于业务层
Respository:一般用于持久层
以上三个注解的作用和属性和Component是一样的,他们三个是用来提供明确的三层使用的注解,使结构更加清晰。

###用于注入数据的
作用相当于xml配置文件中的bean标签中写一个标签
Autowired:
作用:自动按照类型注入,只要有容器中有唯一的一个bean对象类型和要注入的变量类型匹配就可以成功。
1. 如果没有匹配类型则产生异常
2. 如果被spring管理的有多个相同类型对象则按照参数去匹配beanid如果匹配到就成功加载,匹配不到则抛出异常

出现位置:可以是方法上也可以是变量上。(无需有set方法)
Qualifier :
作用:按照名称注入,在给类成员注入时不得单独使用(需和Autowired搭配使用),但是给参数注入时可以使用。
属性:
value:用于指定注入bean的id.

Resource
作用:直接按照bean的id注入,可以独立使用
属性:name:用于指定bean的id
以上三个注入类型都只能注入bean类型的数据,基本类型和string类型无法注入,另外集合类型注入只能通过xml注入。

Value:
作用:用于注入基本类型和String类型的数据
属性:
value:用于指定数据的值,它可以使用SpEL(srping的EL表达式) 写法:${表达式}

用于改变作用范围的

Scope
作用:用于指定bean的作用范围
属性:
value:指定范围的取值。常用取值:singleton prototype

声明周期相关

PreDestroy
    作用:指定销毁方法 
PostConstruct
    作用:指定初始化方法

利用配置类来代替xml

Configuration
作用:指定当前类是一个配置类
ComponentScan
作用:通过注释指定spring在创建容器时要扫描的包
属性:
value:作用和basePackages的作用是一样的,都是用于指定创建容器时要扫描的包路径。等同于在xml配置了:

<context:component-scan base-package="com.how2java.pojo"/>
@Configuration
@ComponentScan(value = "com.how2java.pojo")
public class SpringConfig {
}

Bean
作用:用于把当前方法的返回值放入到spring容器中。
属性:
name:用于指定bean的id,不写时默认id是当前方法名。
细节:当使用注解配置方法时,如果方法有参数,spring框架会去容器中查找有没有可用的bean对象。查找方式和Aturowired方式是一样的,如果类型一样且只有一个对象就注入。


@Configuration
@ComponentScan(value = "com.how2java.pojo")
public class SpringConfig {
    @Bean(name ="c")
    public Category getCategory(Product p){
        return new Category();
    }
    @Bean(name = "p")
    @Scope("prototype")//多例对象
    public Product getProduct(){
        return new Product();
    }
}

//测试类
ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
Product d = (Product) context.getBean("p");

import
作用:用于导入其他的配置类
属性:
value:用于指定其他配置类的字节码
当使用import的注解以后,有import的类就是父配置类,导入的类是子配置类。

@Configuration
@ComponentScan(value = "com.how2java.pojo")
@Import(SpringBean.class)
public class SpringConfig {}

public class SpringBean {
    @Bean(name ="c")
    public Category getCategory(Product p){
        return new Category();
    }
    @Bean(name = "p")
    @Scope("prototype")
    public Product getProduct(){
        return new Product();
    }
}

PropertySource
作用:指定Propertys文件的位置
属性:
value:用于指定文件的名称和路径。
关键字:classpath: 表示类路径下

@Configuration
@ComponentScan(value = "com.how2java.pojo")
@Import(SpringBean.class)
@PropertySource("classpath:config.properties")
public class SpringConfig {

}
//使用方式el表达式
   @Value("${product.name}")
    private String name;
    @Value("${product.no}")
    private String no;
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值