Spring的IoC注解

本文详细讲解了Spring框架中使用IoC注解进行依赖注入的方法,包括@Component注解的使用,如何通过@Scope定义bean作用域,以及初始化和销毁方法的实现。同时,文章还探讨了XML配置与注解配置的优缺点。

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

使用标签简化IoC:

1。使用标签来完成IoC,就必须有IoC注解的解析器
使用context:component-scan来扫描spring需要管理的bean
base-package就告诉spring,去哪些包及其子包里去扫描bean,如果有多个包需要被扫描;只需要用逗号隔开多个包即可
<context:component-scan base-package=“com.ujiuye.spring.xxx” />

2.标注Bean的注解:@Component
默认情况,直接使用类的名字(首字母小写作为bean的名字)
如果要修改bean的名称;直接使用value属性来重新定义bean的名称
@Component(“otherbean”)
public class OtherBean {}

3.使用@Component的限制:
对于没有源代码的类(框架内部的预定义类),只能用XML配置;比如DataSource就只能使用XML方式来做IOC.

4.bean组件版型标签
bean组件版型:
@Service用于标注业务层组件、
@Controller用于标注控制层组件(如struts中的action)、
@Repository用于标注数据访问组件,即DAO组件。
@Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

5.指定bean的作用域:@Scope(“prototype”)

6.初始化和销毁方法
@PostConstruct
public void init() {
相当于

@PreDestroy
public void destory() {
相当于

7.选用xml还是注解:
1),Annotation:使用方便,XML文件很小,但是,依赖关系又重新回到了代码当中;
2),XML:使用稍微复杂,但是,代码很干净,代码不会很任何框架产生关系;XML安全;

在这里插入图片描述

代码:
pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>text</groupId>
    <artifactId>Spring02</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>


    <properties>
        <!--
            定义全局变量:变量名为project.spring.version
        -->
        <project.spring.version>5.0.0.RELEASE</project.spring.version>

    </properties>


    <dependencies>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>


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

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

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

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


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

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

        <!--德鲁伊连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.10</version>
        </dependency>
        <!--mysql连接驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>




    </dependencies>



    <build>

        <!--加载资源文件-->
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>

            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.properties</include>
                </includes>
            </resource>
        </resources>


    </build>

</project>

App-context.xml:

<?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">



    <!--IoC注解扫描
        组件扫描
        base-package:从配置的包中,扫描所有标注了IoC注解的类型,自动的创建该类的对象
        并且放入到Spring容器(包含子包)
    -->
    <context:component-scan base-package="text.spring._06_component"/>


</beans>

SomeBean.java:

package text.spring._06_component;

import com.sun.org.apache.xml.internal.security.Init;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

/**
 * Created by thinkpad on 2019/9/3.
 */
@Controller("some")
//@Scope("prototype")
public class SomeBean {

    public SomeBean(){
        System.out.println("对象被创建...");
    }

    @PostConstruct
    public void init(){
        System.out.println("对象初始化..");
    }


    public void work(){
        System.out.println("正常工作..");
    }

    @PreDestroy
    public void destory(){
        System.out.println("对象销毁...");
    }


}

App.java:

package text.spring._06_component;



import text.spring._05_resource.Employee;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**
 * Created by thinkpad on 2019/9/3.
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class App {


    @Autowired
    private ApplicationContext context;

    @Test
    public void testIoc() throws Exception {
        SomeBean someBean = context.getBean("some",SomeBean.class);

        System.out.println(someBean);
    }


    @Test
    public void testScope() throws Exception {
        System.out.println(context.getBean(SomeBean.class));
        System.out.println(context.getBean(SomeBean.class));
        System.out.println(context.getBean(SomeBean.class));
        System.out.println(context.getBean(SomeBean.class));
        System.out.println(context.getBean(SomeBean.class));
        System.out.println(context.getBean(SomeBean.class));
    }

    @Test
    public void testLifecycle() throws Exception {

        SomeBean someBean = context.getBean(SomeBean.class);

        someBean.work();

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值