context层 :
上下文环境/容器环境 applicationContext.xml
1 ioc注解功能
注解 简化xml文件配置 如 hibernate 映射文件
ioc注解 简化 ioc容器的配置
1 bean对象定义过程
@Component
该注解用于标注一个类
标注哪些需要使用ioc管理/实例化的类
被标注的类会成为ioc实例化的对象
ioc容器解析时,会在工程中扫描所有被该注解标注的类,使用ioc方式对其进行实例化。
@Controller 用于标注业务逻辑对象 xxServlet xxAction xxController
@Service 用于标注服务类型对象 xxService xxServiceImpl
@Repository 用于标注持久化对象 xxDao xxDaoImpl
这三个注解的使用方式和作用效果与@Component一模一样
为了程序开发的规范性,尽量什么类型的对象就使用什么注解进行标注。
2 bean之间的注入过程
@Autowired 自动装载。该注解用于标注目标对象中的一个属性,根据被标注属性的属性名和属性类型在ioc容器中查找匹配的bean,从而得到需要的bean对象。
具体示例:
现在ioc容器中添加context层支持:
包括添加xmlns:context、xsi:schema、注解扫描地址
<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-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd">
<!--
ioc注解功能 ~ context层
导入context层对应的命名空间和schame文件
如果包结构太多,直接扫描com
-->
<context:component-scan base-package="com.etoak.action,com.etoak.dao"></context:component-scan>
</beans>
LoginAction.java:
这里面注意@Component中的参数la可以写也可以不写,写上了就指定了bean对象的id值,默认为类名开头字母小写loginAction.
@Component("la") // <bean id="la" class="xx.LoginAction"/>
public class LoginAction {
@Autowired
private UserDaoImpl ud;
/**
* 首先根据被标注属性的属性名'ud'
* 在ioc容器中查找一个 id="ud" 的bean进行注入
* 再根据被标注属性的属性类型 'UserDaoImpl'
* 在ioc容器中查找一个 class="UserDaoImpl" 的bean进行注入
* @return
*/
public String execute() {
System.out.println("处理客户端提交的login.action请求");
ud.login();
return "success";
}
}
UserDaoImpl.java
@Component // <bean id="userDaoImpl" class="xx.UserDaoImpl"/>
public class UserDaoImpl {
public boolean login(){
System.out.println("连接数据库判断登录是否成功");
return true;
}
}
测试类:
public class Test {
public static void main(String[] args) {
ApplicationContext ac = new
ClassPathXmlApplicationContext("applicationContext.xml");
/**
* 1 在使用注解方式实例化bean对象时
* 由于没有为其设置具体的ID值
*/
LoginAction la = ac.getBean(LoginAction.class);
/**
* 2 虽然没有手动为其设置ID值
* 但是注解会自动为其提供一个ID值
* 类名 首字母小写
*/
UserDaoImpl ud =
(UserDaoImpl)ac.getBean("userDaoImpl");
/**
* 3 手动为其设置一个ID值
*/
LoginAction la2 = (LoginAction)ac.getBean("la");
}
}