1.6 注解
1.6.1 注解的分类
+++ 使用注解创建Bean
@Component("helloController")
指定名称,创建Bean
@Component
名称默认为类名(首字母小写),创建Bean
+++ 使用注解注入Bean
@Resource(name="helloService")
根据指定的名称到IOC容器中查找该对象
@Resource
首先根据byType查找该对象(根据注入类的类型到IOC容器中查找,如果找到一个,注入即可)
如果找到多个,再根据byName寻找(如果IOC容器中有多个同类型的,再根据变量的名称查找)。
创建对象以及处理对象依赖关系,相关的注解:
@Component 指定把一个对象加入IOC容器
@Repository 作用同@Component; 在持久层使用
@Service 作用同@Component; 在业务逻辑层使用
@Controller 作用同@Component; 在控制层使用
@Resource 属性注入
1.6.2 注解使用步骤
使用注解步骤:
1)先引入context名称空间
xmlns:context="http://www.springframework.org/schema/context"
2)开启注解扫描
<context:component-scan base-package="cn.itcast.e_anno2"></context:component-scan>
3)使用注解
通过注解的方式,把对象加入ioc容器。
1.6.3 注解的作用
注解方式可以简化spring的IOC容器的配置!
总结:
1) 使用注解,可以简化配置,且可以把对象加入IOC容器,及处理依赖关系(DI)
2) 注解可以和XML配置一起使用。
1.6.4 案例1 , 简写名称
>>>>>> 使用注解时,指定名称
@Component("helloController")
public class HelloController {
@Resource(name="helloService")
private HelloService helloService;
public void execute() {
helloService.save();
}
}
@Component("helloService")
public class HelloService {
@Resource(name="helloDao")
private HelloDao helloDao;
public void save() {
helloDao.save();
}
}
>>>>>> 使用注解时,省略名称
@Component
public class HelloController {
@Resource
private HelloService helloService;
public void execute() {
helloService.save();
}
}
@Component
public class HelloService {
@Resource
private HelloDao helloDao;
public void save() {
helloDao.save();
}
}
1.6.5 案例2
>>>>>> applicatinContext.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:p="http://www.springframework.org/schema/p"
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">
<context:component-scan base-package="org.jsoft.c_property_d_anno"></context:component-scan>
</beans>
>>>>>> HelloDao .java
@Repository
public class HelloDao {
public void save() {
System.out.println("DB保存用户");
}
}
>>>>>> HelloService .java
@Service
public class HelloService {
@Resource
private HelloDao helloDao;
public void save() {
helloDao.save();
}
}
>>>>>> HelloController.java
@Controller
public class HelloController {
@Resource
private HelloService helloService;
public void execute() {
helloService.save();
}
}
>>>>>> App.java
public class App {
public static void main(String[] args) {
ApplicationContext ac=new ClassPathXmlApplicationContext("org/jsoft/c_property_d_anno/applicationContext.xml");
HelloController helloAction=(HelloController) ac.getBean("helloController");
helloAction.execute();
}
}