为了账号安全,请及时绑定邮箱和手机立即绑定
慕课网数字资源数据库体验端
Spring入门篇_学习笔记_慕课网
为了账号安全,请及时绑定邮箱和手机立即绑定

Spring入门篇

moocer JAVA开发工程师
难度中级
时长 7小时 0分
  • 默认情况下通过@Component定义的Bean都是singleton的,如果需要使用其它作用范围的Bean,可以通过@Scope注解来达到目标.@Scope注解标注在类上. 通过@Scope指定Bean的作用范围 @Scope("prototype") @Component("a") public class A{ } 这样当从Spring容器中获取id为a的Bean时,每次返回的都是新的实例.
    查看全部
  • @Component、@Repository、@Service、@Controller都会有一个属性用于显式设置bean Name. 如果不设置的话,bean的id默认是类名(首字母小写) 如果直接使用注解不指定name属性,那么Bean名称是由BeanNameGenerator自动生成的. 默认生成规则是以该bean对应实体类的类名为基础,并把类名的第一个字母小写,把这个字符串作为bean的id. 可以自定义bean的命名策略,实现BeanNameGenerator接口,去改变这种命名的方式. 使用的时候在<context:component-scan base-package="">标签中,添加name-generator="自定义命名策略的实体类"属性.
    查看全部
  • 注解配置和XML配置的适用场合 有了IOC注解,并不代表要抛弃原来XML配置的方式. 有以下几点原因: 1.注解配置不一定在先天上优于XML配置.如果Bean的依赖关系是固定的,(如Service使用了哪几个DAO类),这种配置信息不会在部署时发生调整,那么注解配置优于XML配置.反之如果这种依赖关系会在部署时发生调整,XML配置显然又优于注解配置,因为注解是对Java源代码的调整,需要重新改写源代码并重新编译才可以实施调整. 2.如果Bean不是自己编写的类(如JdbcTemplate、SessionFactoryBean等),注解配置将无法实施.此时XML配置是唯一可用的方式. 注解配置往往是类级别的,而XML配置则可以表现得更加灵活.比如相比于@Transaction事务注解,使用aop/tx命名空间的事务配置更加灵活和简单. 所以在实现应用中,我们往往需要同时使用注解配置和XML配置. 对于类级别且不会发生变动的配置可以优先考虑注解配置,而对于那些第三方类以及容易发生调整的配置则应优先考虑使用XML配置.Spring 会在具体实施Bean创建和Bean注入之前将这两种配置方式的元信息融合在一起.
    查看全部
  • 采用具有特殊语义的注解 Spring2.5中除了提供@Component注解外,还定义了几个拥有特殊语义的注解,它们分别是:@Repository、@Service和@Controller. 在Spring2.5版本中,这3个注解和@Component是等效的,但是从注解类的命名上,很容易看出这3个注解分别和持久层、业务层和控制层(Web层)相对应. 虽然目前这3个注解和@Component相比没有什么新意,但Spring将在以后的版本中为它们添加特殊的功能.所以如果Web应用程序采用了经典的三层分层结构的话,最好在持久层、业务层和控制层分别采用@Repository、@Service 和 @Controller 对分层中的类进行注解,而用@Component对那些比较中立的类进行注解.
    查看全部
  • <context:component-scan />还允许定义过滤器将基包下的某些类纳入或排除,Spring支持4种类型的过滤方式 过滤器类型: 1.注解:com.baobaotao.SomeAnnotation是一个注解类,我们可以将使用该注解的类过滤出来. 2.类名指定:通过全限定类名进行过滤,可以将com.baobaotao.A纳入扫描,而将com.baobaotao.B排除在外. 3.正则表达式:通过正则表达式定义过滤的类,如com\.baobaotao\.Default.* 4.AspectJ表达式:通过AspectJ表达式定义过滤的类,如com.baobaotao..*Service+ 简单的例子: <context:component-scan base-package="com.baobaotao"> <context:include-filter type="regex" expression="com\.baobaotao\.Default.*"/> <context:exclude-filter type="aspectj" expression="com.baobaotao..*Service+"/> </context:component-scan>
    查看全部
  • 使用了@Component注解与@Autowired之后,调整Xml配置: <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> <context:component-scan base-package="com.baobaotao"/> <!--可省略此配置--> <context:annotation-config/> </beans> 所有通过<bean>元素定义Bean的配置内容已经被移除,仅需要添加一行<context:component-scan/>配置就解决所有问题了 Spring XML 配置文件得到了极致的简化(当然配置元数据还是需要的,只不过以注解形式存在罢了) <context:component-scan/>标签的base-package属性指定了需要扫描的类包,类包及其递归子包中所有的类都会被处理. <context:component-scan/>配置项不但启用了对类包进行扫描以实施注解驱动Bean定义的功能,同时还启用了注解驱动自动注入的功能(即还隐式地在内部注册了AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor),因此当使用<context:component-scan/>后,就可以将<context:annotation-config/>移除了.
    查看全部
  • 完全使用注解定义Bean并完成Bean之间装配: @Component public class A{ @Autowired private B b; } @Component public class B{ } 仅需要在类定义处,使用@Component注解就可以将一个类定义了Spring容器中的Bean. @Component有一个可选的入参(此注解只有一个属性,value),用于指定Bean的名称,@Component("a").一般情况下Bean都是singleton的,需要注入Bean的地方仅需要通过byType策略(@Autowired)就可以自动注入了,所以通常不必指定Bean的名称. 在使用@Component注解后,Spring容器必须启用类扫描机制以启用注解驱动Bean定义和注解驱动Bean自动注入的策略. Spring2.5对context命名空间进行了扩展.提供了这一功能.因此在beans标签中需要添加一个<context:component-scan base-package=""/>标签.
    查看全部
  • @Component注解 虽然我们可以通过@Autowired或@Resource在Bean类中使用自动注入功能,但是Bean还是在XML文件中通过<bean>进行定义,也就是说需要在XML 配置文件中定义Bean,通过@Autowired或@Resource为Bean的成员变量、方法入参或构造函数入参提供自动注入的功能. 可以通过Spring2.5提供的@Component等注解,从XML配置文件中完全移除Bean定义的配置,使用注解来定义bean. Spring本身提供了一个丰富的并且是与具体的数据访问技术无关的数据访问异常结构,用于封装不同的持久层框架抛出的异常,使得异常独立于底层的框架. Spring2.5在@Component的基础上增加了功能类似的额外三个注解:@Repository、@Service、@Constroller,它们分别用于软件系统的不同层次: @Component:是一个泛化的概念,仅仅表示一个组件(Bean),可以作用在任何层次. @Service:通常作用在业务层,功能与@Component相同. @Constroller:通常作用在控制层,功能与@Component 相同. 通过在类上使用@Repository、@Component、@Service和@Constroller注解,Spring会自动创建相应的BeanDefinition对象,并注册到 ApplicationContext中,这些类就成了Spring受管组件.这三个注解除了作用于不同软件层次的类,其使用方式与@Repository是完全相同的. @Repository:只能标注在DAO类,因为该注解的作用不只是将类识别为Bean,同时它还能将所标注的类中抛出的数据访问异常封装为Spring的数据访问异常类型.
    查看全部
  • 使用<context:annotation-config/>之后需要调整xml配置文件. 调整beans.xml配置文件 <?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> <context:annotation-config/> <bean id="a" class="A"/> <bean id="b" class="B"/> </beans>
    查看全部
  • 使用<context:annotation-config/>简化配置 Spring2.1添加了一个新的context的Schema命名空间,该命名空间对注解驱动、属性文件引入、加载期织入等功能提供了便捷的配置. 注解本身是不会做任何事情的,它仅提供元数据信息.要使元数据信息真正起作用,必须让负责处理这些元数据的处理器工作起来. 而前面所介绍的AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor就是处理这些注解元数据的处理器. 但是直接在Spring配置文件中定义这些Bean显得比较笨拙.Spring为我们提供了一种方便的注册这些BeanPostProcessor处理器的方式,就是直接在<beans>标签下添加<context:annotation-config/>标签.且在<beans>元素中声明context命名空间. <context:annotation-config/>将隐式地向Spring容器注册AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、PersistenceAnnotationBeanPostProcessor 以及equiredAnnotationBeanPostProcessor这4个BeanPostProcessor. 在配置文件中使用context命名空间之前,必须在<beans>元素中声明context命名空间.
    查看全部
  • @PostConstruct和@PreDestroy Spring容器中的Bean是有生命周期的,Spring允许Bean在初始化完成后以及Bean销毁前执行特定的操作,既可以通过实现InitializingBean/DisposableBean接口来制定在初始化之后或销毁之前的操作方法,也可以通过<bean>元素的init-method或destroy-method属性指定初始化之后或 销毁之前调用的操作方法. JSR-250为了在bean初始化之后或销毁之前能做一些相关操作,因此定义了两个注解类,分别是@PostConstruct和@PreDestroy. 这两个注解只能应用于方法上. 标注了@PostConstruct注解的方法,将在该bean被初始化后调用,而标注了@PreDestroy注解的方法将在该bean销毁之前调用. public class A{ @PostConstruct public void init(){ System.out.println("我被初始化了"); } @PreDestroy public void destroy(){ System.out.println("我被销毁了"); } } <bean id="a" class="A"/> 当IOC容器创建该bean之后,便调用该bean实体类中的init()方法,当被销毁前调用destroy()方法. 不管是通过实现InitializingBean和DisposableBean接口,还是通过<bean>元素的init-method和destroy-method属性进行配置,都只能为Bean指定一个初始化和销毁的方法.但是使用@PostConstruct和@PreDestroy注解却可以指定多个初始化和销毁方法,那些被标注@PostConstruct或@PreDestroy注解的方法都会在bean初始化后和销毁前时被执行.
    查看全部
  • 只要用到以context:开头的这种标签,就需要在<beans>中添加: http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
    查看全部
  • @Component的基础上增加了功能类似的额外三个注解:@Repository、@Service、@Constroller
    查看全部
  • 使用@Resource注解进行注入: public class Animals { //自动注入bean名称为dog的Bean @Resource/@Resource(name="dog") Dog dog; Cat cat; @Resource(name="cat") public void setCat(Cat cat){ this.cat=cat; } } public class Dog{} public clss Cat{} xml中: <bean id="animal" class="Animals" /> <!--移除关联配置--> <bean id="dog" class="Dog"/> <bean id="cat" class="Cat"/>
    查看全部
  • Spring不但支持自己定义的@Autowired的注解,还支持几个由JSR-250规范定义的注解.分别是@Resource、@PostConstruct以及@PreDestroy @Resource @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,@Resource默认按byName自动注入(@Autowired加上@Qualifier注解配合使用就根据byName自定注入). @Resource有两个重要的属性,分别是name和type,Spring将@Resource注解的name属性解析为Bean的名字(即id),而type属性则解析为Bean的类型. 所以如果使用name属性,则使用byName的自动注入策略.使用type属性,则使用byType自动注入策略. 如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略. @Resource注解可以标注在成员变量,方法和构造函数中.作用在变量和构造方法上就不用在实体类中添加set()方法. Resource注解类位于Spring发布包的lib/j2ee/common-annotations.jar包中,因此在使用之前必须将其加入到项目的类库中. JSR-250的注解生效,除了在Bean类中标注这些注解外,还需要在Spring容器中注册一个负责处理这些注解的BeanPostProcessor: <bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"/> 其中CommonAnnotationBeanPostProcessor实现了BeanPostProcessor接口,它负责扫描使用了JSR-250注解的Bean,并对它们进行相应的操作.
    查看全部

举报

0/150
提交
取消
课程须知
Java的高级课程,适合对Java基础知识应用自如,并熟悉MVC架构的小伙伴们。如果想成为一名Java工程师,这门课程是一定要学哒。
老师告诉你能学到什么?
掌握依赖注入、IOC和AOP的概念,并能进行简单应用。
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!