Java学习笔记

springmvc+hibernate使用过程碰到问题

2016-10-24  本文已影响100人  supory

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..*"/>

上一篇下一篇

猜你喜欢

热点阅读