作者介绍
闫德栋:曾参与开发集团外网项目电动汽车项目及MDS生产管理系统等。目前在瑞腾项目组从事开发,在工作闲暇之余分享瑞腾项目主要用的基本框架以及java的一些知识。后续有时间再给大家写一下SSh框架和数据库、存储等相关文章。想学习的伙伴可以看看,大家共同进步。
SSM(spring、SpringMVC和Mybatis)
Spring是一个开源框架,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
环境准备:
eclipse、jdk1.6、tomcat6.0
第一步:创建一个Dynamic WebProject
导入ssm需要的jar包。
第二步:配置xml文件
1、配置web.xml
2、创建applicationContext.xml文件
3、创建映射处理器spring-servlet.xml
4、mybatis的配置文件
第三步:写java后台
1、控制层,也就是映射处理器将请求映射到控制层的某个具体的方法上。
2、service层
3、dao层
4、创建model
5、mybatissqlmapper 映射文件
注解:
一、
隐式地向Spring容器中注册AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、PersistenceAnnotationBeanPostProcessor及RequiredAnnotationBeanPostProcessor 这4 个BeanPostProcessor
对这个结果类做个解释:
1、如果你想使用@Autowired注解,那么就必须事先在Spring 容器中声明AutowiredAnnotationBeanPostProcessor Bean。
2、如果想使用@Resource 、@PostConstruct、@PreDestroy等注解就必须声明CommonAnnotationBeanPostProcessor。
3、如果想使用@PersistenceContext注解,就必须声明PersistenceAnnotationBeanPostProcessor的Bean。
4、如果想使用@Required的注解,就必须声明RequiredAnnotationBeanPostProcessor的Bean。
4个类的传统注入方式:
一般来说,这些注解我们还是比较常用,尤其是Antowired的注解,在自动注入的时候更是经常使用,所以如果总是需要按照传统的方式一条一条配置显得有些繁琐和没有必要,于是spring给我们提供 的简化配置方式,自动帮你完成声明。
二、
配置项不但启用了对类包进行扫描以实施注释驱动Bean 定义的功能,同时还启用了注释驱动自动注入的功能(即还隐式地在内部注册了AutowiredAnnotationBeanPostProcessor 和CommonAnnotationBeanPostProcessor),因此当使用 后,就可以将 移除了。
三、
相当于注册了DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter两个bean,配置一些messageconverter。即解决了@Controller注解的使用前提配置。
这也是spring3.0中新增加的。
@Controller
@Controller对应表现层的Bean,也就是Action,
例如:
使用@Controller注解标识UserAction之后,就表示要把UserAction交给Spring容器管理,在Spring容器中会存在一个名字为"userAction"的action,这个名字是根据UserAction类名来取的。注意:如果@Controller不指定其value【@Controller】,则默认的bean名字为这个类的类名首字母小写,如果指定value【@Controller(value="UserAction")】或者【@Controller("UserAction")】,则使用value作为bean的名字。
@Service
@Service对应的是业务层Bean,
例如:
@Service("userService")注解是告诉Spring,当Spring要创建UserServiceImpl的的实例时,bean的名字必须叫做"userService",这样当Action需要使用UserServiceImpl的的实例时,就可以由Spring创建好的"userService",然后注入给Action:在Action只需要声明一个名字叫“userService”的变量来接收由Spring注入的"userService"即可,具体代码如下:
注意:在Action声明的“userService”变量的类型必须是“UserServiceImpl”或者是其父类“UserService”,否则由于类型不一致而无法注入,由于Action中的声明的“userService”变量使用了@Resource注解去标注,并且指明了其name = "userService",这就等于告诉Spring,说我Action要实例化一个“userService”,你Spring快点帮我实例化好,然后给我,当Spring看到userService变量上的@Resource的注解时,根据其指明的name属性可以知道,Action中需要用到一个UserServiceImpl的实例,此时Spring就会把自己创建好的名字叫做"userService"的UserServiceImpl的实例注入给Action中的“userService”变量,帮助Action完成userService的实例化,这样在Action中就不用通过“UserServiceuserService = new UserServiceImpl();”这种最原始的方式去实例化userService了。如果没有Spring,那么当Action需要使用UserServiceImpl时,必须通过“UserServiceuserService = new UserServiceImpl();”主动去创建实例对象,但使用了Spring之后,Action要使用UserServiceImpl时,就不用主动去创建UserServiceImpl的实例了,创建UserServiceImpl实例已经交给Spring来做了,Spring把创建好的UserServiceImpl实例给Action,Action拿到就可以直接用了。Action由原来的主动创建UserServiceImpl实例后就可以马上使用,变成了被动等待由Spring创建好UserServiceImpl实例之后再注入给Action,Action才能够使用。这说明Action对“UserServiceImpl”类的“控制权”已经被“反转”了,原来主动权在自己手上,自己要使用“UserServiceImpl”类的实例,自己主动去new一个出来马上就可以使用了,但现在自己不能主动去new“UserServiceImpl”类的实例,new“UserServiceImpl”类的实例的权力已经被Spring拿走了,只有Spring才能够new“UserServiceImpl”类的实例,而Action只能等Spring创建好“UserServiceImpl”类的实例后,再“恳求”Spring把创建好的“UserServiceImpl”类的实例给他,这样他才能够使用“UserServiceImpl”,这就是Spring核心思想“控制反转”,也叫“依赖注入”,“依赖注入”也很好理解,Action需要使用UserServiceImpl干活,那么就是对UserServiceImpl产生了依赖,Spring把Acion需要依赖的UserServiceImpl注入(也就是“给”)给Action,这就是所谓的“依赖注入”。对Action而言,Action依赖什么东西,就请求Spring注入给他,对Spring而言,Action需要什么,Spring就主动注入给他。
@Resource和@Autowired的区别
a、@Resource默认是按照名称来装配注入的,只有当找不到与名称匹配的bean才会按照类型来装配注入;
b、@Autowired默认是按照类型装配注入的,如果想按照名称来转配注入,则需要结合@Qualifier一起使用;
c、@Resource注解是又J2EE提供,而@Autowired是由spring提供,故减少系统对spring的依赖建议使用 @Resource的方式;
d、 @Resource和@Autowired都可以书写标注在字段或者该字段的setter方法之上。
子衿技术公众号,邀请IT界技术大牛激扬文字,发表真知灼见,篇篇干货。
我们依托南瑞集成实验室,开展线下交流,动手实践,欢迎您的加入!
地址:南京市江宁区诚信大道19号南京南瑞集团公司信息系统集成分公司
电话:025-81095705
欢迎扫码关注子衿技术
1)推送在【子衿技术】平台的文章,阅读量超过1000,该文章作者可获赠礼品。
2)投稿数量较多的作者可获赠礼品。
3)定期从关注的用户中抽取3名幸运关注用户,这3名幸运用户可获赠礼品。
技术干货文章随时欢迎向“子衿技术团队”订阅号投稿。
投稿邮箱:xx.miaojingwen@163.com