Bean相关 IoC Aop

本文介绍了Spring框架的基础概念,包括如何创建一个简单的Spring Bean并使用XML配置文件进行管理。接着,讲解了依赖注入的概念,通过setter方法和构造器注入实现对象之间的松耦合。最后,讨论了自动装配特性,展示了如何通过类型匹配自动装配Bean以及使用@Autowired注解进行自动装配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring IoC容器 -Spring教程™

 

1. 一个简单的Spring bean【讲一个对象类以bean的形式交托给Spring管理】

Pom依赖

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.12.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>
</dependencies>

HelloWorld

package com.luoyu.yibai;

/**
 * @author :luoyu
 * @version :1.0
 * @date : 2022/2/26 9:50 上午
 * @description
 */

public class HelloWorld {
    private String name;

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

    public void printHello() {
        System.out.println("Spring 3 : Hello ! " + name);
    }
}

applicationContext.xml

<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-3.0.xsd">

    <bean id="helloBean" class="com.luoyu.yibai.HelloWorld">
        <property name="name" value="Yiibai" />
    </bean>

</beans>

App

public class App {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
        HelloWorld obj = (HelloWorld) context.getBean("helloBean");
        obj.printHello();
    }
}

2. 采用依赖注入进行松耦合

在Spring框架中,依赖注入(DI)的设计模式是用来定义对象彼此间的依赖。它主要有两种类型:

  • Setter方法注入
  • 构造器注入

 IOutputGenerator 

public interface IOutputGenerator {
    public void generateOutput();
}
JsonOutputGenerator
public class JsonOutputGenerator implements IOutputGenerator{
    @Override
    public void generateOutput() {
        System.out.println("Json Output Generator");
    }
}
CsvOutputGenerator
public class CsvOutputGenerator implements IOutputGenerator{
    @Override
    public void generateOutput() {
        System.out.println("Csv Output Generator");
    }
}
OutputHelper
public class OutputHelper {
    IOutputGenerator outputGenerator;

    public void generateOutput(){
        outputGenerator.generateOutput();
    }

    public void setOutputGenerator(IOutputGenerator outputGenerator){
        this.outputGenerator = outputGenerator;
    }
}

Spring-Common.xml

<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-2.5.xsd">

    <bean id="OutputHelper" class="com.luoyu.yibai.di.OutputHelper">
        <property name="outputGenerator" ref="jsonOutputGenerator" />
    </bean>

    <bean id="csvOutputGenerator" class="com.luoyu.yibai.di.CsvOutputGenerator" />
    <bean id="jsonOutputGenerator" class="com.luoyu.yibai.di.JsonOutputGenerator" />

</beans>
App
public class App {
    public static void main( String[] args )
    {
        ApplicationContext context =
                new ClassPathXmlApplicationContext(new String[] {"Spring-Common.xml"});

        OutputHelper output = (OutputHelper)context.getBean("OutputHelper");
        output.generateOutput();

    }
}

3. 自动装配

在Spring中,“类型自动装配”的意思是如果一个bean的数据类型与其它bean属性的数据类型相同,将自动兼容装配它。

public class Person 
{
	private Ability ability;
	//...
}
public class Ability 
{
	private String skill;
	//...
}

通常情况下,明确地装配 bean: 

<bean id="person" class="com.yiibai.common.Person">
		<property name="ability" ref="invisible" />
	</bean>
	
	<bean id="invisible" class="com.yiibai.common.Ability" >
		<property name="skill" value="Invisible" />
	</bean>

也可以进行按照类型装配

<bean id="person" class="com.yiibai.common.Person" autowire="byType" />
	
	<bean id="invisible" class="com.yiibai.common.Ability" >
		<property name="skill" value="Invisible" />
	</bean>

@Autowired注解是通过匹配数据类型自动装配Bean

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值