前言
Spring 认为所有组件都应该放在IOC容器中,组件之间的关系通过容器进行自动装配(依赖注入)通过注解的形式完成组件的注册,管理,依赖,注入功能。
一、配置类&配置文件?
这是关于组件的,以前要写Bean标签的方式
<bean id="person "class="com.bean.Person">
<property name="age" value="18"></property>//属性赋值
<property name="name" value="art"></property>
</bean>
可以在一个主测试类写一个main方法,new 一个 ClassPathXmlApplicationContext的方法传入一个xml文件的位置,返回的是IOC容器,容器里边就有你的组件,(例如配置文件中的Person)
现在用配置类的方式
配置类等同于以前的配置文件
@Configuration//告诉spring这是一个配置类
public class MainConfig{
@Bean//以前用的是Bean标签,给容器中注册一个Bean,类型是返回值的类型,id默认是方法名
public Person person(){
return new Person("lisi",20);
}
}
用配置类的话是要
ApplicationContext applicationContext=new AnnotationConfigApplicationContext(MainConfig.class);//现在是传配置类的位置
applicationContex.getBean(Person.class);
@Value
使用@value赋值
1、基本数值
2、可以写Spell;#{}
3、可以写${};取出配置文件中的值(在运行环境变量里面的值)
public class Person{
@Value("张三")
private String name;
@Value("#{20-2}")
private Integer age;
//无参数构造就有默认值了
}
@AutoWired
自动装配,
Spring利用依赖注入(DI),完成对IOC容器中各个组件的依赖关系赋值。
Controller里边用Service自动装配,Service里边用DAO也是自动装配
用了AutoWired属性就有值了
1)、默认优先按照类型去容器中找对应组件:applicationContext.getBean(BookDao.class);
2)、如果找到多个相同类型的组件,再将属性的名称作为组件的id去容器中查找 applicationContext.getBean("bookDao“)
3)、@Qualifier(“bookDao”),使用@Qualifier指定需要装配的组件id,而不是属性名
4)、自动装配默认一定要将属性赋值好,否则会报错
5)、@Primary 让Spring进行自动装配的时候,默认使用bean,也可以继续使用@Qualifier指定。
BookService{
@Autowired
BookDao bookDao;
}