Spring学习——IOC由Annotation实现

基本使用

配置文件

在src文件夹下,创建xml文件,这个文件放置Spring的配置。一般使用beans.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">

    <!-- 打开Spring的Annotation -->
    <context:annotation-config/>

    <!-- 设定Spring去那些包中找Annotation -->
    <context:component-scan base-package="spring"></context:component-scan>

</beans>

创建几个功能类

User类

public class User {

    private int id;

    private String name;

    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public User() {
    }

    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;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + "]";
    }

}

UserDao类

public class UserDao {

    public void add(User user) {
        System.out.println("add " + user);
    }

    public void delete(int id) {
        System.out.println("delete " + id);
    }

}

UserService类

public class UserService {

    private UserDao userDao;

    private User user;

    public void add() {
        userDao.add(user);
    }

    public void delete(int id) {
        userDao.delete(id);
    }

    public UserDao getUserDao() {
        return userDao;
    }

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

}

添加类注解

以上三个类中,UserDao和UserService类需要注解,我们在类的上面添加注解:

@Component("userDao")
public class UserDao {
    ……
}
@Component("userService")
public class UserService {
    ……
}

类注解添加完成后,还需要对变量的set方法添加注解resource

@Component("userService")
public class UserService {

    private UserDao userDao;

    private User user;

    public void add() {
        userDao.add(user);
    }

    public void delete(int id) {
        userDao.delete(id);
    }

    public UserDao getUserDao() {
        return userDao;
    }

    //默认通过名称注入,在JSR330中提供了@Inject来注入
    @Resource
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

}

测试

创建测试类
public class TestIoc {

    private BeanFactory factory = new ClassPathXmlApplicationContext("beans.xml");

    @Test
    public void test01() {
        User user = new User(1,"annotation");
        UserService service = factory.getBean("userService",UserService.class);
        service.setUser(user);
        service.add();
        service.delete(11);
    }

}

测试结果

add User [id=1, name=annotation]
delete 11

运行一遍之后,相信已经了解Annotation实现IOC的流程。相较于xml的实现,Annotation的实现更加简单便捷。具体取舍看个人的喜好。

注解的细化

我们当然可以使用@Component来对注入类注解,但是Spring提供了更细化的注解,让编程者更清楚的区分各个类

注解含义
@Component是公共的,创建bean的注解
@Repository专门用于Dao注入的注解,数据库处理
@Service业务层注解
@Controlleraction作为控制器,一般用这个注解

单例/多例注解

记得上篇Spring学习——IOC由xml实现讲过,bean中有scope属性,可以设置注入类的单例/多例模式。
那么来到Annotation实现IOC时,我们就需要使用@Scope注解来设置单例/多例模式:

@Component("userService")
@Scope("prototype")
public class UserService {
    ……
}

可以自己做个简单测试,这里不做赘述。

非注入类的变量注解

上一篇Blog看的仔细,那么猜猜或许能够猜到如何实现,对,使用value。

@Component("user")
public class User {

    private int id;

    private String name;

    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public User() {
    }

    public int getId() {
        return id;
    }

    @Value("22")
    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    @Value("注解名")
    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + "]";
    }

}

在UserService的setUser方法上添加@Resource注解,并且修改测试方法为:

    @Test
    public void test01() {
//      User user = new User(1,"annotation");
        UserService service = factory.getBean("userService",UserService.class);
//      service.setUser(user);
        service.add();
        service.delete(11);
    }

测试结果

add User [id=22, name=注解名]
delete 11

最后

学习中,如果有错误或不足之处,请留言告诉我,我会尽快回复并改正。
即时更新地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值