springmvc+hibernate使用过程碰到问题
1、javax与java库的区别
javax是扩展的库,如j2ee等;
java库提供的是基本的类,如Map collection list等io库,桌面类库,是属于jdk的,即java develop kit;
2、javax.annotation.Resource作用?
是作为bean的注入使用!什么是注入使用?稍后解答!
都可以作用到字段和setting方法上;
@Resource有两个重要的属性,name和type;而Spring将name属性做为解析的bean的名称,而type作为解析的bean的类型;如果使用name则使用byName注入策略;如果使用type,则使用byType注入策略;如果都没有使用,则默认使用反射机制,使用byName的注入策略;
注入策略:目前的理解是sping自动实例化一个对象,而不用在代码中new一个对象;
网上解释:假如A组件调用了B组件的方法,我们就可以称A组件依赖于B组件。我们通过使用依赖注入,Java EE应用中的各种组件不需要以硬编码方式耦合在一起,甚至无需使用工厂模式。当某个Java实例需要其他Java实例时,系统自动提供所需要的实例,无需程序显示获取,这种自动提供java实例我们谓之为依赖注入,也可以称之为控制反转(Inversion of Control IoC)
3、@Repository @Service @Controller @Component的使用?
刚开始以为是hibernate的注解,后来研究发现是springmvc的控制分层;他们分别对应数据写入层、服务层、控制层,而@Component则是用于不太好归类的类;
原理是通过xml配置的扫描路径:寻找到该路径下的这些注解类,并将他们纳入到spring容器进行管理;
@Service public class VentorServiceImpl implements iVentorService{}
@Repository public class VentorDaoImpl implements iVentorDao {}
getBean的默认名称是类名(头字母小写),如果想自定义,可以@Service(“aaaaa”)这样来指定,这种bean默认是单例的,如果想改变,可以使用@Service(“beanName”)@Scope(“prototype”)来改变。可以使用以下方式指定初始化方法和销毁方法(方法名任意)
@PostConstruct public void init() { }
@PreDestroy public void destory() { }
注意:这个注入放置的位置,entityBehaviorImpl类注入到serviceImpl类中,而service接口注入到action中?为什么?
注入方式:
把DAO实现类注入到service实现类中,把service的接口(注意不要是service的实现类)注入到action中,注入时不要new 这个注入的类,因为spring会自动注入,如果手动再new的话会出现错误,然后属性加上@Autowired后不需要getter()和setter()方法,Spring也会自动注入。至于更具体的内容,等对注入的方式更加熟练后会做个完整的例子上来。
注解在spring的配置文件里面只需要加上和,可以使用base-package="*"表示全部的类。
< context:component-scan base-package=”com.eric.spring”>
其中base-package为需要扫描的包(含所有子包)
在接口前面标上@Autowired和@Qualifier注释使得接口可以被容器注入,当接口存在两个实现类的时候必须指定其中一个来注入,使用实现类首字母小写的字符串来注入,如:
@Autowired
@Qualifier("chinese")
private Man man;
否则可以省略,只写@Autowired 。
4、过滤使用正则regex和aspectJ
1. 扫描过滤方式
过滤器类型 说明
注释 假如 com.baobaotao.SomeAnnotation 是一个注释类,我们可以将使用该注释的类过滤出来。
类名指定 通过全限定类名进行过滤,如您可以指定将 com.baobaotao.Boss 纳入扫描,而将 com.baobaotao.Car 排除在外。
正则表达式 通过正则表达式定义过滤的类,如下所示: com\.baobaotao\.Default.*
AspectJ 表达式 通过 AspectJ 表达式定义过滤的类,如下所示: com. baobaotao..*Service+
下面是一个简单的例子:
expression="com\.baobaotao\.service\..*"/>
expression="com.baobaotao.util..*"/>
值得注意的是 配置项不但启用了对类包进行扫描以实施注释驱动 Bean 定义的功能,同时还启用了注释驱动自动注入的功能(即还隐式地在内部注册了 AutowiredAnnotationBeanPostProcessor 和 CommonAnnotationBeanPostProcessor),因此当使用 后,就可以将 移除了。
默认情况下通过@Component定义的 Bean 都是 singleton 的,如果需要使用其它作用范围的 Bean,可以通过@Scope注释来达到目标,如以下代码所示:
24. 通过@Scope指定 Bean 的作用范围
packagecom.baobaotao;
importorg.springframework.context.annotation.Scope;
…
@Scope("prototype")
@Component("boss")
publicclassBoss {
…
}
expression="com\.baobaotao\.service\..*"/>
expression="com.baobaotao.util..*"/>