XML开发和注解开发的总结
Mybatis
-
XML开发
-
需要mybatis整体的配置文件,一般命名为mybatis-config.xml
-
在整体配置文件中配置mybatis的环境信息如数据源和事务管理器和mapper映射器等等
-
<mappers> <mapper resource="mapper/UserMapper.xml"/> </mappers>
-
-
编写mapper接口,单独编写对应接口的xml的文件,该文件中存储SQL
-
使用XML开发需要读取整体配置文件信息,并获取相应的接口
-
public void setUp() throws Exception { // 加载 MyBatis 配置文件 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); sqlSession = sqlSessionFactory.openSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); }
-
-
-
注解开发---(可以纯注解)
-
一般mybatis中的注解开发也需要整体配置的xml文件
-
在整体xml配置文件中配置mapper的映射器
-
<mappers> <mapper class="com.example.mapper.UserMapper"/> </mappers>
-
-
编写mapper接口,接口上不需要添加注解,直接在接口方法中使用相应的注解编写SQL语句
-
读取XML配置信息,并获取相应的接口
-
public void setUp() throws Exception { // 加载 MyBatis 配置文件 String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); sqlSession = sqlSessionFactory.openSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); }
-
-
Spring容器
-
XML开发
-
需要spring容器的整体配置文件,通常使用
applicationContext.xml作为默认的Spring配置文件名称 -
在该配置文件中编写bean代码即可
-
XML开发需要读取整体配置文件获取Spring容器
-
public void testSpring() { // 加载 Spring 配置文件 ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); // 获取 Bean UserService userService = (UserService) context.getBean("userService");
-
-
注解开发
-
注解开发不需要xml配置文件
-
需要一个配置类,使用
@Configuration注解标记一个类为配置类@Configuration的作用:
- 标记配置类。
- 启用代理模式,确保
@Bean方法是单例的。 - 支持
@Import和@ComponentScan。
- 不加
@Configuration的问题:@Bean方法可能不是单例。- 不支持
@Bean方法之间的依赖注入。
-
-
在这个配置类中配置扫描的包路径
-
@Configuration @ComponentScan(basePackages = "com.example") // 指定扫描的包 public class AppConfig { }-
获取Spring容器时加载该配置类即可
-
public class MainApp { public static void main(String[] args) { // 加载配置类,初始化 Spring 容器 ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); // 从容器中获取 Bean UserService userService = context.getBean(UserService.class); // 使用 Bean userService.doSomething(); } }
-
Tomcat
- XML开发
- tomcat项目为web应用,一个web应用下存在web.xml文件
- 在web.xml文件中配置servlet或者过滤器的全部信息,包括映射路径等等
- 使用时启动tomcat服务器即可,不需要手动加载web.xml文件
- 注解开发
- 不在web.xml中配置servlet或者过滤器的信息,而直接在类上加注解实现
@WebServlet注解定义 Servlet,@WebFilter注解定义 Filter。- 不需要额外的扫描配置,直接使用注解定义完类启动tomcat服务器即可
SpringMVC
-
XML开发
-
需要在web.xml文件中配置DispatcherServlet
-
DispatcherServlet中需要使用初始化参数,来配置Spring容器配置文件的路径
-
<servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-mvc-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
-
-
需要在Spring配置文件中配置扫描包的路径以及开启mvc注解驱动
-
<!-- 启用组件扫描,扫描控制器 --> <context:component-scan base-package="com.example.controller" /> <!-- 启用注解驱动 --> <mvc:annotation-driven />
-
-
使用注解配置访问路径等信息后启动tomcat服务器即可
-
-
注解开发
-
编写一个类继承AbstractAnnotationConfigDispatcherServletInitializer,该类会被tomcat自动扫描并加载为DispatcherServlet
-
实现该继承类中的方法来指定Spring容器配置类的的class文件
-
public class AppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { // 配置根应用上下文(非 Web 相关的 Bean,如服务层、数据层) //这个就是配置Spring容器,指定为配置Spring容器的配置类即可 @Override protected Class<?>[] getRootConfigClasses() { return new Class<?>[] { RootConfig.class }; } // 配置 Web 应用上下文(Web 相关的 Bean,如控制器(Controller)、视图解析器等) @Override protected Class<?>[] getServletConfigClasses() { return new Class<?>[] { WebConfig.class }; } // 配置 DispatcherServlet 的映射路径 @Override protected String[] getServletMappings() { return new String[] { "/" }; } }
-
-
编写Spring的配置类,配置包扫描信息和开启mvc注解驱动即可
-
可以二合一只配置Spring容器配置文件作为RootConfigClasses
-
这个Spring配置类需要实现WebMvcConfigurer接口,该接口中提供了许多方法用来自定义SpringMVC的行为,比如配置视图解析器、添加拦截器等等
-
@Configuration @EnableWebMvc @ComponentScan(basePackages = "com.example.controller") public class WebConfig implements WebMvcConfigurer { // 配置视图解析器 @Bean public ViewResolver viewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/views/"); resolver.setSuffix(".jsp"); return resolver; } // 配置静态资源处理 @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**") .addResourceLocations("/static/"); } // 配置拦截器(可选) @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new CustomInterceptor()); } }
-
-
最好还是分开进行配置,getRootConfigClasses方法里写Spring容器的配置类,getServletConfigClasses方法里写web相关的配置类
-
Spring容器配置类
-
@Configuration @ComponentScan(basePackages = {"server"}) public class SpringConfig { @Bean public User returnBean(){ return new User(); } } -
web相关的配置类
-
@Configuration @EnableWebMvc @ComponentScan(basePackages = {"controller"}) public class WebConfig implements WebMvcConfigurer { @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); // 启用 DefaultServlet } @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new UserInterceptor()).order(1).addPathPatterns("/**"); } }
-
-

浙公网安备 33010602011771号