SpringIoc初探

SpringIoC初探

在学习spring之前,最好对java基本语法(例如注解,反射机制),javaWeb的基本知识,xml,maven等有一定的了解.本博客只是起到大纲的作用,具体详细讲解可以查阅网上更多的资料,某些内容不作过多解释.

概述

1.DI(Dependency Injection依赖注入)这个概念替换传统的IoC依赖注入:让调用类某一接口实现类的依赖关系由第三方(容器或者协作类)注入,以移除调用类对某一接口实现类的依赖.
2.SpringIoC容器:通过配置文件或者注解描述类和类之间的依赖关系,自动完成类的初始化和依赖注入工作.即,我们在实践过程中就是通过编写xml文件和对某些类使用特定的注解来实现依赖注入.

BeanFactory和ApplicationContext

1.Bean工厂(Bean Factory)是spring框架中最核心的接口,提供了高级的IoC配置,而应用上下文(ApplicationContext)建立在BeanFactory之上.我们一般可以直接使用ApplicationContext而并非BeanFactory.
2.Spring中的bean:和一般我们说的javaBean有一些区别,所有可以被Spring容器实例化并管理的Java类我们都可以称为Bean.要想让Spring管理我们的Bean,我们可以通过注解或者配置xml文件来实现.

实践部分:使用xml配置初探SpringIoc

1.说明:本次实践使用的ide为IntelliJ IDEA,使用maven管理工具.
2.创建Spring项目:使用maven创建一个quickstart项目.
3.编写pom.xml:添加如下依赖,这里的spring.version可以替换为你想用的版本.

    <!-- spring dependency -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>

4.编写一个Product的bean:在java的目录(我这里是在com.dadagum下,这取决于你创建maven项目时的命名)下创建bean包,然后创建Product类:

package com.dadagum.bean;

public class Product {

    private int id;
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

5.在main下创建目录resources,在下面创建applicationContext.xml文件,内容如下(你可以提前了解xml的命名空间和schema等知识,让你看这些配置文件没有那么头疼):

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id = "product" class="com.dadagum.bean.Product">
        <property name="name" value="test"/>
        <property name="id" value="1"/>
    </bean>
</beans>

6.测试:直接修改App.java内容,运行:

package com.dadagum;

import com.dadagum.bean.Product;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args )
    {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        Product product = context.getBean("product",Product.class);
        System.out.println(product.getId() + " " + product.getName());
    }
}

output:1 test
7.注意:①要想自己的bean交给spring容器管理,需要在xml配置中定义这个bean;如果这个bean中某些成员是引用类型的,可以使用ref进行关联(详细可以参考其他资料).

使用注解简化xml文件配置

1.@Component,@Service,@Repository,@Controller注解(区别和作用可自行查阅):

packeage com.dao
@Component
public class Product{
}

等价于下面在xml文件中的定义

<bean id = "product" class="com.dao.Product"/>

注意,如果注解@Component中没有指定bean的value,那么默认这个bean的id就是第一个字母小写的类名,如上.
2.@Autowired自动注入

@Component
public class Stock{
    @Autowired
    private Product item;
}

上述也可以为product写一个set方法,然后在方法上添加@Autowired注解,效果是一样的.上述的效果等价于xml文件中的

<bean id = "stock" class = "XXX">
    <property name = "item" ref = "product"/>
</bean>

3.自动扫描包:bean使用注解(如@Component)+在xml文件中敲下以下代码即可让spring自动管理你的bean(需要添加命名空间和schema文件的url)

<context:component-scan base-package="XXX"/>

当然你也可以利用正则表达式再细分包下需要spring管理的bean,详细可查阅网上资料.

猜你喜欢

转载自blog.csdn.net/qq_37993487/article/details/80357495