Spring(2) Spring注解开发与案例分析

一.用于创建对象的注解

1. @Component :用于把当前类对象存入spring容器中,他的作用就和在XML配置文件中编写一个标签实现的功能是一样的。他有一个属性:value

value:用于指定bean的id。当我们不写时,它的默认值是当前类名,且首字母改小写。

2.由Component延伸出来的三个注解 :Controller, Service,Repository

这三个注解的作用和属性与Component是一模一样的,他们三个是spring框架为我们提供明确三层划分来使用的注解,使我们的三层对象的划分更加清晰。

(1)@Controller:一般用在表现层

(2)@Service:一般用在业务控制层

(3)@Repository:一般用在持久层

@Service("accountService")
public class AccountServiceImpl implements IAccountService {
    //程序代码
}

二.用于注入数据的注解

(1)@Autowired:它自动按照数据类型注入,只能用于注入bean类型的数据。

  • 若容器中有唯一的一个bean对象类型和要注入的变量类型匹配,就可以注入成功
  • 若容器中没有任何bean的类型和要注入的变量类型匹配,则报错
  • 若容器中有多个bean的类型都与要注入的变量类型匹配,则以要注入的变量的变量名为key,在所匹配类型的所有bean对象中选择相应key值的bean注入。

(2)@Qualifier:在按照类型注入的基础之上再按照名称注入。它在给类成员注入时不能单独使用,必须搭配Autowired. 只能用于注入bean类型的数据。

  • 属性 value : 用于指定注入bean的id。

(3) @Resource:直接按照bean的id注入,它可以独立使用。只能用于注入bean类型的数据。

  • 属性 name:用于指定注入bean的id。

(4) @Value:用于注入基本类型和String类型的数据

  • 属性  value:用于指定数据的值。它可以使用spring中SpEL(也就是spring的el表达式),SpEL的写法:${表达式}

三.案例分析 

1.案例要求:编写一个用于对账户信息进行CURD操作的系统,其中我们使用c3p0连接池来作为数据源,同时使用DbUtils类库来操作数据库。dbutils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发。

2.开发方式:我们这里使用注解+XML文件配置的方式来开发。其中来自于第三方库和jar包中的类我们使用XML文件配置较为方便,我们自己编写的类使用注解配置较为方便。

3.源码分析

(1)Account实体类

/**
 * 账户的实体类
 */
public class Account implements Serializable {

    private Integer id;
    private String name;
    private Float money;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public Float getMoney() {
        return money;
    }

    public void setMoney(Float money) {
        this.money = money;
    }

    @Override
    public String toString() {
        return "Account{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", money=" + money +
                '}';
    }
}

(2)持久层实现类AccountDaoImpl

/**
 * 账户的持久层实现类
 */
@Repository("accountDao")
public class AccountDaoImpl implements IAccountDao {

    @Autowired
    private QueryRunner runner;

    @Override
    public List findAllAccount() {
        try{
            return runner.query("select * from account",new BeanListHandler(Account.class));
        }catch (Exception e) {
            throw new RuntimeException(e);
        }
    }



    @Override
    public void saveAccount(Account account) {
        try{
            runner.update("insert into account(name,money)values(?,?)",account.getName(),account.getMoney());
        }catch (Exception e) {
            throw new RuntimeException(e);
        }
    }


}

(3)业务层实现类AccountServiceImpl

/**
 * 账户的业务层实现类
 */
@Service("accountService")
public class AccountServiceImpl implements IAccountService {

    @Autowired
    private IAccountDao accountDao;

    @Override
    public List findAllAccount() {
        return accountDao.findAllAccount();
    }


    @Override
    public void saveAccount(Account account) {
        accountDao.saveAccount(account);
    }

}

(4)配置文件spring-beans.xml




    
    


    
    
        
        
        
        
        
    

    
    
        
        
    

(5)测试类

public class Client {
    public static void main(String[] args) {
        ApplicationContext ac = new ClassPathXmlApplicationContext("spring-beans.xml");
        IAccountService service = ac.getBean("accountService",IAccountService.class);
        //插入数据
        Account acc = new Account();
        acc.setName("wx");
        acc.setMoney((float)90);
        service.saveAccount(acc);
        //获取所有数据
        List list = service.findAllAccount();
        for(Account account:list){
            System.out.println(account);
        }
    }
}

 

你可能感兴趣的:(-----SSM框架-----)