原生配置文件引入, 需要用到 @ImportResource 注解
@Import 也可以导入配置文件,但是这个配置文件是【自定义的 java 类 eg : MyConfig 】
@Import({User.class,Matcher.class})
// 引入 xml配置
@ImportResource("classpath:spring.xml")
(六)配置文件
配置文件类型:
1 : application.properties
2: application.yaml 类型
基本语法:
1 : key:value
2:大小写敏感
3:用缩进表示层级关系
4:缩进不允许使用 tab 键 ,只允许使用 4 个空格
5: # 代表注释
6:字符串不需要加引号
自定义配置文件
# 配置 端口号
# 优先级更高
server.port=8887
#spring.banner.image.location=classpath:tiao.jpg
#配置项目名称
#server.servlet.context-path=/demo
#配置文件可以自定义的
com.text.name = zhangsan
com.text.age = 18
com.text.sid = 1001
二、相关注解
(一)创建Bean相关的注解
(1)@Component :可以使用此注解描述 Spring 中的 Bean ,但它是一个泛化的概念,仅仅表示一个组件( Bean ),并且可以作用在任何层次。使用时只需将该注解标注在相应类上即可。
(2)@Repository:用于将数据访问层(DAO 层)的类标识为 Spring 中的 Bean ,其功能与 @Component 相同。
(3)@Service:通常作用在业务层(Service 层),用于将业务层的类标识为 Spring 中的 Bean ,其功能与@Component 相同。
(4)@Controller:通常作用在控制层(如 Struts2 的 Action 、 SpringMVC 的 Controller ),用于将控制层的类标识为Spring 中的 Bean ,其功能与 @Component 相同。
(二)Bean生命周期相关的注解
(1)@Scope:注解在类名上,用于指定Bean 作用范围,等同于 xml 文件中配置 Bean 时使用 scope 属性。常用值singleton、 prototype
(2)@PostConstruct:注解在方法上,指定Bean 创建时回调方法。相当于 xml 配置文件中标签中使用 init-method 属性的功能。
(3)@PreDestroy:注解在方法上,指定Bean 销毁时回调方法。相当于 xml 配置文件中标签中使用 destroy-method 属性的功能。
(三)依赖注入相关的注解 自动装配
(1)@Autowired
自动装配:自动装配就是指 Spring 容器在不使用 和 标签的情况下,可以自动装( autowire )相互协作的 Bean之间的关联关系,将一个 Bean 注入其他 Bean 的 Property 中。
自动装配只需要较少的代码就可以实现依赖注入。但不能自动装配简单数据类型,比如 int 、 boolean 、String 等,相比较显式装配,自动装配不受程序员控制。
@Autowired注解可以应用到 Bean 的属性变量、属性的 setter 方法、非 setter 方法及构造函数等,配合对应的注解处理器完成 Bean 的自动配置工作。默认按照 Bean 的类型进行装配。
(2)@Resource
作用与 Autowired 相同,区别在于 @Autowired 默认按照 Bean 类型装配,而 @Resource 默认按照Bean 实例名称进行装配。
@Resource 中有两个重要属性: name 和 type 。
Spring 将 name 属性解析为 Bean 的实例名称, type 属性解析为 Bean 的实例类型。如果指定 name属性,则按实例名称进行装配;如果指定 type 属性,则按 Bean 类型进行装配。如果都不指定,则先按Bean 实例名称装配,如果不能匹配,则再按照 Bean 类型进行装配;如果都无法匹配,则抛出NoSuchBeanDefinitionException 异常。
(3)@Qualifier
与 @Autowired 注解配合使用,会将默认的按 Bean 类型装配修改为按 Bean 的实例名称装配, Bean的实例名称由 @Qualifier 注解的参数指定。
(4)@Value
@Autowired注入另外的 bean ,而 @Value 注解则是注入值。由于在 java 源代码中注入常量值会带来硬编码问题,该注解使用较少。
(四)Spring MVC常用注解
(1)@Controller:用于定义控制器类,控制器Controller 负责处理由 DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该 Model 返回给对应的 View 进行展示。
(2) @RequestMapping:提供路由信息,负责URL 到 Controller 中的具体函数的映射。
(注意:没有指定 method 属性值 ,那么请求处理方法可以支持 HTTP 的 GET , POST 请求方式)
(3)@ResponseBody:控制器方法加上 @ResponseBody注解后,返回值不是页面,而是数据。@ResponseBody注解过的方法,可以返回Map对象,spring mvc会将该对象转换成 json格式的字符串,然后放在响应体中响应给浏览器。(json格式与java对象的相互转换,需要添加jackson依赖 )
(4)@RestController :@Controller和@ResponseBody的合集。 (注:Spring4.0增加的,继承自@Controller) 相当于 @Controller 和 @ResponseBody
(5)@RequestParam:在SpringMVC后台控制层获取参数,类似一种是request.getParameter(“name”)
注解在方法的参数上,指定一个请求参数名,封装到被注解的参数 。一旦有该注解,默认情况,一次请求中,必须要具有该指定的请求参数,否则服务器拒绝该次请求
(6)@PathVariable :将请求URL中的模板变量映射到控制器方法的参数上,即取出uri模板中的变量作为参数。
注解在方法的参数上,先在@RequestMapping中使用{占位符}来定义url ,使用@PathVariable("占位符") 来获取该占位符对应url中的值 封装到方法的参数中
(7)@SessionAttributes:指定request域中共享的数据在session域中共享(特别注意:@SessionAttributes 只能声明在类上,不能声明在方法上!!)
(8)@RequestHeader:用于获取请求消息中的请求头相关数据(/注解在方法的参数上,指定获取对应请求头的值,封装到方法的参数中)
(9)@CookieValue:用于获取请求消息中的Cookie的值( 注解在方法的参数上,获取指定 cookie 的值,封装到方法的参数中 )
(10)@GetMapping:组合注解,是@RequestMapping(method = RequestMethod.GET) 的缩写。该注解将限制只接受 HTTP GET的请求方式。
(11)@PostMapping:组合注解,是@RequestMapping(method = RequestMethod.POST) 的缩写。该注解将限制只接受HTTP POST的请求方式。
(五)元注解
元注解是 专门用来注解其他注解的注解 ,听起来有些绕口,实际上就是专门为自定义注解提供的注解。java.lang.annotation提供了四种元注解:
l @Documented – 注解是否将包含在 JavaDoc 中
l @Retention – 什么时候使⽤该注解(SOURCE:仅存在于源代码中;CLASS:在 class字节码文件中存在;RUNTIME:运行时)
l @Target – 注解用于什么地方
l @Inherited – 是否允许子类继承该注解
l @Repeatable - 是否可重复注解, jdk1.8 引 ⼊