美文网首页Java学习笔记
springmvc+hibernate使用过程碰到问题

springmvc+hibernate使用过程碰到问题

作者: supory | 来源:发表于2016-10-24 16:51 被阅读100次

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

    相关文章

      网友评论

        本文标题:springmvc+hibernate使用过程碰到问题

        本文链接:https://www.haomeiwen.com/subject/euikuttx.html