一、Spring
-
什么是bean? Bean :在计算机英语中,有可重用组件的含义 -
什么是JavaBean? JavaBean : 用java语言编写的可重用组件 -
什么是可重用组件? 这里我们拿Spring来举例,众所周知使用Spring,我们就会用到Spring容器。容器起到的作用就是减少我们创建对象的次数,也就是每次用对象,直接取的容器当中的。 实际应用: 一般我们会在控制层加@Controller注解,这个就是把该类存放到容器当中,然后当我们想要从容器当中获取的时候,可以写一个变量类型和变量名称再加上@Autowired,这也是依赖注入,他会去容器当中找对应的实例,然后注入到该变量中,然后我们就可以直接使用该对象了。最终达到了代码重用的效果。
在类上面添加的注解
@Component
泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注把普通pojo实例化到spring容器中,相当于xml配置文件中的<bean id="" class=""/>
@Service
用于在业务逻辑层(BaseService.java)组件上添加的注解,想要获取此实例默认通过类名小写,还可以自己可定义,比如:@Service(“BaseService”’)
@Controller
用于在控制层(BaseController.java)组件上添加的注解
@Repository
用于Dao层实现组件,即Dao层的实现类上面添加的注解
@RequestMapping
处理映射请求的注解。用于类上,也可以用在方法上,加在类上表示类中的所有响应请求的方法都是以该地址作为父路径。有6个属性
1、value:指定请求的实际地址
A) 可以指定为普通的具体值;如@RequestMapping(value ="/testValid")
B) 可以指定为含有某变量的一类值;如@RequestMapping(value="/test/{day}")
C) 可以指定为含正则表达式的一类值;如@RequestMapping(value="/{textualPart:[a-z-]+}.{numericPart:[\\d]+}") 可以匹配../liminbo.122912请求。
2、method:指定请求的method类型, GET、POST、PUT、DELETE等
@RequestMapping(value = "/test", method = RequestMethod.GET, headers="Host=www.baidu.com")
3、consumes: 指定处理请求的提交内容类型(Content-Type)
@RequestMapping(value = "/test",consumes="application/json")处理application/json内容类型
4、produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回
@RequestMapping(value = "/test", produces = "application/xml"); @RequestMapping(value = "/test", produces = "application/json");
5、params:指定request中必须包含某些参数值是,才让该方法处理
@RequestMapping(value = "/test", params="name=zhangsan")
6、headers:指定request中必须包含某些指定的header值,才能让该方法处理请求
@RequestMapping(value = "/test", method = RequestMethod.GET, headers="Host=www.baidu.com")
@ResponseStatus
用于修饰一个类或者一个方法,修饰一个类的时候,一般修饰的是一个异常类,当处理器的方法被调用时,@ResponseStatus指定的code和reason会被返回给前端。value属性是http状态码,比如404,500等。reason是错误信息。
@ResponseStatus(value=HttpStatus.FORBIDDEN, reason="出现了错误")
public class UserException extends RuntimeException{
XXX
};
@Scope
在使用XML定义Bean时,我们可能还需要通过bean的scope属性来定义一个Bean的作用范围,我们同样可以通过@Scope注解来完成这项工作
@Scope("prototype")
public class Basic TypeController
<bean id = "" class = "" scope = "prototype"></bean>
1、singleton:单例,即容器里只有一个实例对象。
2、prototype:多对象
每一次请求都会产生一个新的bean实例,Spring不无法对一个prototype bean的整个生命周期负责,容器在初始化、配置、装饰或者是装配完一个prototype实例后,将它交给客户端,由程序员负责销毁该对象,不管何种作用域,容器都会调用所有对象的初始化生命周期回调方法,而对prototype而言,任何配置好的析构生命周期回调方法都将不会被调用
3、request:对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效
4、Session:作用于一次会话,一次会话内有效
在方法上面添加的注解
@RequestMapping 映射请求
@ResponseBody将方法返回的数据转换成json格式并响应给客户端.
@Transactional
用于该注解的方法会被spring aop加入事务管理,即该方法中如果出现异常呢么方法中进行的数据操作全部回滚。 注:使用该注解首先要在 xml 配置中的事务配置信息:
<bean id="transactionManager" class=
"org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
在参数上面添加的注解
@RequestBody
将客户端发送的json格式数据和java对象、基本数据、数组集合等进行绑定,只接收post请求中的数据
@RequestParam
作用是提取和解析请求中的参数。支持类型转换,类型转换目前支持所有的基本Java类型 @RequestParam(value=”number ”) String number 将请求中参数为number映射到方法的number上。required=false表示该参数不是必需的,请求上可带可不带。
public Map<String,Object> Dome1(
@RequestParam(value="id",defaultvalue="0",required=false)int id,
@RequestParam(value="name",defaultvalue="0",required=false)int name
)
@PathVariable
处理请求 url部分,当使用@RequestMapping 样式映射时,即@RequestMapping(“test/{paramId}”), 这时的paramId可通过 @Pathvariable注解绑定它传过来的值到方法的参数上
@RequestMapping("/delete/{id}")
@ResponseBody
public Map<String,Object> deleteById(@PathVariable(value="id")int id){
}
@CookieValue
将cookie里一些值绑定到方法参数上
public Map<String,Object> deleteById(@CookieValue("JSESSIONID")String cookie){
}
在属性上面添加的注解
@Autowired
自动注入,将用此注解的属性注入到当前类中,Autowired默认先按byType,如果发现找到多个bean,则,又按照byName方式比对,如果还有多个,则报出异常。
@Resource
默认按 byName自动注入,如果找不到再按byType找bean,如果还是找不到则抛异常,无论按byName还是byType如果找到多个,则抛异常。可以手动指定bean,它有2个属性分别是name和type,使用name属性,则使用byName的自动注入,而使用type属性时则使用byType自动注入。 @Resource(name=”bean名字”) @Resource(type=”bean的class”)
@Qualifier
使用@Autowired 时,如果找到多个同一类型的bean,则会抛异常,此时可以使用 @Qualifier(“beanName”),明确指定bean的名称进行注入,此时与 @Resource指定name属性作用相同。
@Value
为了简化从properties里取配置,可以使用@Value, 可以properties文件中的配置值。
public class cat{
@Value("${cat.ear}")
private String ear;
}
@DateTimeFormat
可以将页面传过来的 String类型转换为 Date 类型。具体使用:直接在成员变量上加入注解就可以了,同时还可以指定 format 的格式.
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date creatDate ;
总结:
使用注解之前要开启自动扫描功能,其中base-package为需要扫描的包(含子包)。 <context:component-scan base-package="cn.test"/> @Configuration把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。
@Scope注解 作用域 @Lazy(true) 表示延迟初始化 @Service用于标注业务层组件、 @Controller用于标注控制层组件(如struts中的action) @Repository用于标注数据访问组件,即DAO组件。 @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。 @Scope用于指定scope作用域的(用在类上) @PostConstruct用于指定初始化方法(用在方法上) @PreDestory用于指定销毁方法(用在方法上) @DependsOn:定义Bean初始化及销毁时的顺序 @Primary:自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常 @Autowired 默认按类型装配,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。如下: @Autowired @Qualifier(“personDaoBean”) 存在多个实例配合使用 @Resource默认按名称装配,当找不到与名称匹配的bean才会按类型装配。 @PostConstruct 初始化注解 @PreDestroy 摧毁注解 默认 单例 启动就加载 @Async异步方法调用
|