Spring学习2、配置spring容器的两种方法

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();
    };
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值