多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] # 简介 ~~~ 曾经xml的配置 <bean id="" class="" scope="" init-method="" destroy-method=""> <property name="" value="" | ref="" /> </bean> 用于创建对象: 他们作用就和在xml配置文件中编写一个<bean>标签一样 component: 作用: 用于把当前类对象存入spring容器 属性: value,用于指定bean的id.当我们不写时,默认值是当前类名,而且首字母小写 Repository:标识持久层组件 Service:标识服务层(业务层)组件 Controller:标识表现层组件 用于注入数据的 作用和xml配置文件bean中写一个<property />标签作用是一样的 Autowired: 作用:自动按照类型注入,只要容器中有唯一的一个bean对象和要注入的变量类型匹配,就可以注入成功 出现位置: 可以是变量上,也可以是方法上 细节: 使用注解注入时,set方法不是必须的 Qualifier: 作用: 按照类中注入的基础之上再按照名称注入.它给类成员注入时不能单独使用,但是给方法参数注入时可以 属性: value,用于指定bean的id. Resource: 作用: 直接按照bean的id注入,他可以独立使用 属性: name:用于指定bean的id 以上三个注入只能注入其他bean类型,基本数据类型和string无法通过上述注解实现. 另外,集合类型只能通过xml来实现 value: 作用: 用于注入基本类型和string类型的数据 属性: value: 用于指定数据的值,他可以用做spring中的spel(也就是spring的el表达式) spel的写法${表达式} 用于改变作用范围的 作用就和在bean标签中使用scope属性实现的功能是一样的 Scope: 作用: 用于指定bean的作用范围 属性: value:指定范围的取值.常用取值:singleton prototype 和生命周期相关的 作用和在bean中使用init-method和destroy-method作用是一样的 PostConstruct 作用: 用于指定和销毁方法 PreDestroy 作用: 指定初始化方法 ~~~ # 组件 使用aop需要导入spring-aop包 组件扫描(component scanning):spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件 特定组件包括 - @Component:基本注解,标识了一个受spring管理的组件 - @Repository:标识持久层组件 - @Service:标识服务层(业务层)组件 - @Controller:标识表现层组件 对于扫描到的组件,spring有默认的命名策略.使用非限定类型,第一个字母小写.也可以在注解中通过value属性值标识组件的名称 # classpath中扫描组件 当在组件类上使用了特定的注解之后,还需要在spring的配置文件中声明 `<context:component-scan>:` - base-package属性指定一个需要扫描的基类包,spring容器将会扫描这个基类包里及其子包中的所有类 - 当需要扫描多个包时,可以使用逗号分隔 - 如果仅希望扫描特定的类而非基包下的所有类,可使用resource-pattern属性过滤特定的类,示例: ~~~ <context:component-scan base-package="com.study.beans" resource-pattern="autowire/*.class" /> ~~~ - `<context:include-filter>`子节点表示要包含的目标类 - `<context:exclude-filter>`子节点表示要排除在外的目标类 - `<context:component-scan>`下可以拥有若干个`<context:include-filter>`和`<context:exclude-filter>`子节点 ![](https://img.kancloud.cn/46/bb/46bb47e66515ec307fa3e7cc1b974c95_905x353.png) ~~~ <!-- 这边要设置为false,使用自己的filter --> <context:component-scan base-package="com.jdxia.domain" use-default-filters="false"> <!-- 如果type的值是annotation,那么expression是注解的全类名 --> <context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/> <!-- 如果type的值是assignable,那么expression是接口或者实现类的全类名 --> <context:include-filter type="assignable" expression="com.jdxia.domain.Person"/> </context:component-scan> ~~~ # 开启使用注解代替配置文件 ~~~ <!-- 指定扫描bean包下面所有类以及包 注意:扫描包时,会扫描指定包下所有的子孙包 --> <context:component-scan base-package="studySpring"> </context:component-scan> ~~~ ~~~ @Component(value = "user") public class User implements Serializable { ~~~