各种注解的使用说明
1. @Component
l 来源:spring提供(org.springframework.stereotype.Component;)
l 作用:将一个资源注入到spring容器中
l 用法:@Component("action1");(此处名称为自定义,不写默认为类名首字母小写)
l 效果:
<bean id="action1" class="cn.itcast.web.action.TestAction"/> |
2. 衍生注解
注:这三个注解和@Component的作用相同,只是目的更加明确
@Controller:表现层
@Service:业务层
@Repository:持久层
3. @Autowried(@Resource)
l 作用:自动注入。
注:(不使用其它注解时默认将当前对象作为bean名称注入)
n 配合@Qualifier使用,通过bean的名称注入,此时按类型注入失效。
n 配合@Value使用,注入基本类型和Sting类型的数据。
n 注:不使用其它注解时默认将当前对象作为bean名称去查找这个bean是否存在,如果存在就将此bean注入;否则会抛没有找到这个bean的定义异常:NoSuchBeanDefinitionException。
l 属性:
n required:false=>注入失败抛空指针异常;true=>注入失败抛异常(默认)
l 效果:
n 不加@Qualifier:
@Autowired private DepartmentDao departmentDao; ------------------------------------------------<property name="departmentDao"ref="departmentDao"/> |
n 加@Qualifier:
@Autowired @Qualifier("departmentDaosss") private DepartmentDao departmentDao; -------------------------------------------------- <property name="departmentDao" ref="departmentDaosss "/> |
l 注:
按照类型注入时,有多个相同类型的对象(受Spring管理的,eg:有多个类实现了同一个接口,并且都进行注入了spring管理器),注入失败。此时就必须使用@Qualifier通过不同的名称进行区分。
Spring注解操作
思路:先告知在哪里扫描到注解;然后对此类操作开启注解即可。
各种扫描标签:
l <context:property-placeholder location=""/>:扫描properties文件
l <context:component-scan base-package=""/>指定bean的搜索范围
各种注解的开启
l AOP:<aop:aspectj-autoproxy/>
l 事务tx:<tx:annotation-driventransaction-manager="transactionManager"/>
三层架构的代码基本配置
l 表现层的动作类书写
@Controller:告知这是业务层
@Scope("prototype"):打开多实例
@Autowired:自动引入另一个资源
l 业务层的代码书写
@Service("userService"):告知这是业务代码,并为此资源起名:userService
@Autowired:自动引入另一个资源
l 持久层的代码书写
@Repository("userDao"):告知这是数据访问层,并为此资源起名:userDao
在业务层控制事务
1. 在开启扫描bean的前提下,开启事务注解
2. 在业务接口上添加:@Transactional
注:@Autowire与@Resource的区别
@Autowire:Spring提供;默认按类型注入
@Resource:Java提供;默认按名称注入
Struts的注解配置
注:加入一个jar包:struts2-convention-plugin-2.3.15.3.jar
1. 动作类的注解
l 类的上面
n @ParentPackage("struts-default")
n @Namespace("/test")
n @Results({@Result(name="success",location="/ok.jsp")})
l 方法上:
n @Action("save")
Hibernate的注解配置
待续。。。