1. @Component :用于把当前类对象存入spring容器中,他的作用就和在XML配置文件中编写一个
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);
}
}
}