Spring-03-利用注解配置应用IOC

在JDK5.0时追加一些新特性
List<String>
for(String s : list){ }
Integer i = 10;

注解:在类定义,方法定义,成员变量定义前面使用
格式:@注解标记名

a.组件自动扫描
b.注入注解


组件自动扫描

可以按指定的包路径,将包下所有组件扫描。如果发现组件类定义前有以下标记,会将组件扫描到Spring容器。
@Component//其他组件
@Controller//控制层组件
@Service//业务层组件xxxService
@Repository//数据访问层组件xxxDAO

@Scope控制对象创建,默认单例
@PostConstruct指定init-method
@PreDestroy指定destroy-method

@Named(需要引入第三方标准包)


在.xml文件中,开启组件扫描。扫描org.tarena包下的组件

.xml文件中:
<!-- 开启组件扫描 -->
    <context:component-scan base-package="org.tarena"/>

ExampleBean类

@Component//扫描ExampleBean组件,默认id=exampleBean
@Scope("singleton")//控制单例singleton, 非单例prototype,等价于<bean scope="...">
public class ExampleBean {

    @PostConstruct//初始化,等价于<bean lazy-init="true" init-method="init">
    public void init(){
        System.out.println("初始化逻辑");
    }

    @PreDestroy//等价于<bean destroy-method="destroy">
    public void destroy(){
        System.out.println("释放资源");
    }

    public void execute(){
        System.out.println("执行execute()方法");
    }
}

ExampleBean1类,可以指定id 的名字

@Component("exam1")//指定id=exam1
public class ExampleBean1 {

    public void execute(){
        System.out.println("执行execute()方法");
    }
}

注入注解

@Resource:标记写在变量定义前,或者set方法定义前
@Autowired:与@Resource一样

注意:
1. 如果标记写在变量前,则set方法可以省略
2.一般使用时,功能等价,都可以实现注入
如果不存在多个匹配类型,两个都可以使用
如果存在多个匹配类型,建议按名称注入
@Resource(name=”指定名称”)或
@Autowired
@Qualifier(“p”)


set注入建议用@Resource
构造器建议用@Autowired


Computer类

@Component("c")
public class Computer {
    public void show(){
        System.out.println("显示电脑配置信息");
    }
}

Phone类

@Component("p")
public class Phone {
    public void show(){
        System.out.println("显示手机配置信息");
    }
}

Student类
需要注入Computer和Phone对象
@Resource标记
@Autowired

public class Student {

    //需要调用Computer和Phone对象
    //注入Computer对象
    @Resource
    private Computer c;
    public void setC(Computer c) {
        this.c = c;
    }

    //注入Phone对象
    @Autowired
    private Phone p;
    public void setP(Phone p) {
        this.p = p;
    }

    public void show(){
        System.out.println("显示学生信息");
        c.show();
        p.show();
    }
}

测试类

public class TestIOC {
    public static void main(String[] args){
        String conf = "applicationContext.xml";
        ApplicationContext ac = new ClassPathXmlApplicationContext(conf);

        Student s = (Student)ac.getBean("s");
        s.show();
    }
}


SpringIOC应用:
自己写的组件建议使用注解配置;
框架API只能用XML配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值