依赖注入的手工装配的两种方式注解
@Resource 一般用这种 按照属性的名字去找XML种BEEN 来注入 如果没有找到匹配的会按照类型去找
或
@Autowired 按照类型去找
可以写在属性上或者Set方法上
依赖注入的自动装配的方式 不建议使用,会出现不可遇见的装配结果
通过在classpath自动扫描方式把组件纳入 spring容器中管理
<context:component-scan base-package="扫描的包"> base-package 为需要扫描的包(含子包)
他可以在类路径下寻找标注了@Component,@Service,@Controller,@Repository注解的类,
并把这些类纳入进spring容器中管理,他的作用和在XML文件中使用bean节点配置组件是一样的,
要使用自动扫描机制,需要打开它的配置。
@Service 用于标注业务层组件。
@Controller 用于标注控制层组件(如struts 中的 action)
@Repository 用于标注数据访问组件(DAO组件)
@Component 泛指组件,当组件不好归纳的时候,我们可以使用这个注解进行标注
配合
@Scope("prototype")使用 bean的作用域配置
@PostConstruct 写在方法上 表示该方法为初始方
JPA中 用@PersistenceContext 得到EntityManager em;
事务
@Transactional 类注释
如果方法不使用事务(如get* find*)
在方法上用
@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)
该方法就不在使用事务控制
@Temporal(TemporalType.DATE) 时间类型
@Enumerated(EnumType.STRING) @Column(length=5,nullable=false) 枚举
多对多
@ManyToMany(cascade=CascadeType.REFRESH, fetch=FetchType.EAGER)
@JoinTable(name="employee_department", joinColumns=@JoinColumn(name="username"),
inverseJoinColumns=@JoinColumn(name="department_id"))
public Set<Department> getDepartments() {
return departments;
}
----------------------------------------------------------------------------------
@ManyToMany(mappedBy="departments", cascade=CascadeType.REFRESH)
public Set<Employee> getEmployees() {
return employees;
}