1、使用xml文件配置spring。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 上面是必要配置代码,不需要过多理解-->
<!--配置一个bean实例-->
<bean id="person01" class="com.atguigu.bean.Person" scope="prototype">
<property name="lastName" value="zhangsan"/>
<property name="age" value="18"/>
</bean>
启动容器时便会自动创建一个Person实例供我们使用。需要使用Person实例时,先创建一个ioc容器
ApplicationContext ioc = new ClassPathXmlApplicationContext("config.xml");
再调用Person实例
Person bean1 =(Person) ioc.getBean("person01"); //根据id调用
便可以使用Person的 实例bean1,而不用我们自己去new一个实例对象。
2、使用java方法(注解方式)配置spring
@Configuration
//通过Configuration注解表示这个java文件是配置文件
public class PersonConfiguration {
@Bean
//通过 Bean注解来定义容器,功能等价于
// <bean id="person01" class="com.atguigu.bean.Person" >
public Person provide(){
return new Person();
}
ApplicationContext ctx = new AnnotationConfigApplicationContext(PersonConfiguration.class);
ctx.getBean(Person.class);
3、自动装配
① 自动装配的概念
[1]手动装配:以value或ref的方式明确指定属性值都是手动装配。
[2]自动装配:根据指定的装配规则,不需要明确指定,Spring自动将匹配的属性值注入bean中。
② 装配模式
[1]根据类型自动装配:将类型匹配的bean作为属性注入到另一个bean中。若IOC容器中有多个与 目标bean类型一致的bean,Spring将无法判定哪个bean最合适该属性,所以不能执行自动装配
[2]根据名称自动装配:必须将目标bean的名称和属性名设置的完全相同
[3]通过构造器自动装配:当bean中存在多个构造器时,此种自动装配方式将会很复杂。不推荐使用。
③ 选用建议
相对于使用注解的方式实现的自动装配,在XML文档中进行的自动装配略显笨拙,在项目中更多的使用注解的方式实现。
使用注解标识组件
①普通组件:@Component
标识一个受Spring IOC容器管理的组件
②持久化层组件:@Respository
标识一个受Spring IOC容器管理的持久化层组件
③业务逻辑层组件:@Service
标识一个受Spring IOC容器管理的业务逻辑层组件
④表述层控制器组件:@Controller
标识一个受Spring IOC容器管理的表述层控制器组件
⑤组件命名规则
[1]默认情况:使用组件的简单类名首字母小写后得到的字符串作为bean的id
[2]使用组件注解的value属性指定bean的id
(四种注解功能基本一样,仅仅是为了让开发人员自己明确当前的组件扮演的角色。)
组件被上述注解标识后还需要通过Spring进行扫描才能够侦测到。
①指定被扫描的package
<context:component-scan base-package="com.atguigu.component"/>
在指定要扫描的包时,context:component-scan 元素会自动注册一个bean的后置处理器:AutowiredAnnotationBeanPostProcessor的实例。该后置处理器可以自动装配标记了@Autowired、@Resource或@Inject注解的属性。
使用@Autowired注解就可以根据类型实现自动装配
示例:
Book类有注解@Component,表明它成为Spring容器管理的组件
Person类中有 book实例,一般情况我们需要new一个book对象,而通过自动装配,在Person类中声明Book实例时 ,添加注解@Autowired,Spring便会为我们自动装配Book实例对象。不用自己new。
同理 ,在Person类的say()方法中需要传入Book实例 ,@Autowired注解同样可自动为我们传入实例
@Component
public class Book {
private String name;
private String alouther;
}
@Component
public class Person {
private String lastName;
@Autowired
private Book book;
@Autowired
public void say(Book book){
book.say();
};