Spring回顾(二)注解实现IoC和DI

注解实现DI

@Resource

为JavaEE拓展包提供。代替xml配置,注入对象,按照bean的id和类型匹配。具体写法如下:
配置文件:

<!—配置注解解析器-->
<context:annotation-config></context:annotation-config>
<bean id="car" class="com.spring.annotation.di.Car"></bean>
<bean id="wheel" class="com.spring.annotation.di.Wheel"></bean>

Car.java

package com.spring.annotation.di;
import javax.annotation.Resource;
public class Car {
    @Resource
    private Wheel wheel;
    public void show(){
        System.out.println("I'm a Car !");
        wheel.show();
    }
}

Wheel.java

package com.spring.annotation.di;
public class Wheel {
    public void show(){
        System.out.println("I'm a wheel !");
    }
}

测试类:Annotation_di_test.java

package com.spring.annotation.di;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Annotation_di_test {
    @Test
    public void test_Annotation_Di(){
        ApplicationContext context =
                new ClassPathXmlApplicationContext("applicationContext.xml");
        Car car = (Car) context.getBean("car");
        car.show();
    }

Tips:这里@Resource注解还能添加name属性。

  • 如果@Resource的注解的name属性的值为”“

则把@Resource所在的属性的名称和spring容器中的id作匹配
如果匹配成功,则赋值
如果匹配不成功,则会按照类型进行匹配
如果匹配成功,则赋值,匹配不成功,报错

  • 如果@Resource的注解的name属性的值不为”“

则解析@Resource注解name属性的值,把值和spring容器中的ID进行匹配
如果匹配成功,则赋值
如果匹配不成功,则报错

@Autowired

代替xml配置,注入对象,按照bean的类型匹配。为spring框架提供。与Qualifier注解组合。可以代替@Resource注解的功能。例子如下:
Car.java

package com.spring.annotation.di;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
public class Car {
    //这两行注解相当于@Resource(name="wheel")
    @Autowired
    @Qualifier("wheel")
    private Wheel wheel;
    public void show(){
        System.out.println("I'm a Car !");
        wheel.show();
    }
}

IoC

@Component

将类放到Spring容器中,我们称这个类为一个bean,也称作一个component。在定义类类时使用注解@Component,能替代在配置文件applicationContext.xml中配置bean。从而减少配置文件的书写。
首先我们要在配置文件中声明哪个包的bean注解需要被扫描:

<context:component-scan base-package="com.spring.annotation.ioc"></context:component-scan>

在定义bean类时使用@Component注解,可使用value属性,即指定bean的id。若不指定value属性,则会以第一个字母小写的类名作为bean的id

package com.spring.annotation.ioc;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;

@Component(value="helloWorld")
public class HelloWorld {
    public void hello(String name){
        System.out.println("Hello, " + name);
    }

@PostConstructor & @PreDestroy

xml中可以配置一个bean的init方法和destroy方法,分别在bean被实例化和销毁的时候调用。我们除了通过xml配置之外,还能通过注解来声明哪个方法为init方法,哪个方法为destroy方法。
使用的注解分别为:
@PostConstructor
@PreDestroy
例子:

package com.spring.annotation.di;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
public class Car {
    //这两行注解相当于@Resource(name="wheel")
    @Autowired
    @Qualifier("wheel")
    private Wheel wheel;
    public void show(){
        System.out.println("I'm a Car !");
        wheel.show();
    }
    @PostConstruct
    public void init (){
        System.out.println("Car init !");
    }
    @PreDestroy
    public void destroy(){
        System.out.println("Car destroy !");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值