【配置Spring Framework】

1.XML配置依赖关系

bean是由Springframework管理,我们自己编写bean,Spring也内建了bean,比如ApplicationContext、ResourceLoader、BeanFactory、MessageSource、ApplicationEventPublisher。

【Servle级别上下文】/WEB-INF/servletContext.xml

<beans>

  <mvc:anntation-driven />     <!-- 作用是 指示Spring使用@RequestMapping @RequestBody @RequestParam @PathParam @ResponseBody --->

  <bean name="greetingServiceImpl" class="com.wrox.GreetingServiceImpl" />

  <bean name="helloController" class="com.wrox.GreetingServiceImpl" >

    <property name="greetingService" ref="greetingServiceImpl" />

  </bean>

</beans>

【@RequestMapping细节】

在声明了DispatcherServlet后,@RequestMapping是相对于Dispatcher的URL-pattern而不一定是web程序根URL。

【上下文细节】

一般的程序都有两个上下文,【根上下文用来容纳业务逻辑类】+【Servlet级别上下文用来容纳控制器类】

【根上下文级别】/WEB-INF/rootContext.xml   声明的bean ,DispatherServlet的应用上下文也会继承所有根上下文的bean。

<beans>

  <bean name="greetingServiceImpl" class="com.wrox.GreetingServiceImpl" / >

</beans>

然后在web.xml部署描述符

<context-param>

  <param-name>contextConfigLocation</param-name>

  <param-value>/WEB-INF/rootContext.xml</param-value>

</context-param>

<listener>

  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

【Spring日志细节】log4j-jcl 支持Spring用Commons Logging打印日志到Log4j。

……………………………………………………………………………………………………………………………………………………………………………………………………

2.混合配置依赖关系 =  组件扫描 + 注解配置。

@Component  组件注解 ,@Controller @Repository @Service   + @AutoWired

【上下文细节目标】根上下文容纳Service、Repository和其他业务逻辑,DispatcherServlet上下文容纳Controller。

/WEB-INF/rootContext.xml 【黑名单】

<beans>

  <context:annotation-config />

  <context:component-scan base-package="com.wrox" >

    <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>

  </context-component-scan>

</beans>

/WEB-INF/servletContext.xml 【白名单】

<beans>

  <mvc:annotation-driven />

  <context:annotation-config />

  <context:component-scan base-package="com.wrox" use-default-filters="false" />

    <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" />

  </context:component-scan>

</beans>

【组件扫描不到的bean】第三方已经编译成Class无法通过添加注解 都可以在配置中 声明bean补充组件扫描扫不到的地方。

……………………………………………………………………………………………………………………………………………………………………

【使用@Configuration配置Spring】XML难于调试、XML无法单元测试(只能集成测试)。   +  @Inject

1.引入外部Properties

@Configuration

@PropertySource({("classpath:com/wrox/config/settings.properties","file:config.properties")})

public class ExampleConfiguration{

  //如果需要访问properties的值

  @Inject Environment environment;

  @Value("my.property.key") String myPropertyValue;  //自动注入

}

2.拆分多个配置

@Configuration

@Import({DatabaseConfiguration.class,ClusterConfiguration.class})

@ImportResource("classpath:com/wrox/config/spring-security.xml")

public class ExampleConfiguration

@Configuration
@ComponentScan(
basePackages = "com.wrox.site",
excludeFilters = @ComponentScan.Filter(Controller.class)
)
public class RootContextConfiguration
{
}
@Configuration
@EnableWebMvc
@ComponentScan(
basePackages = "com.wrox.site",
useDefaultFilters = false,
includeFilters = @ComponentScan.Filter(Controller.class)
)
public class ServletContextConfiguration
{
}
public class Bootstrap implements WebApplicationInitializer
{
@Override
public void onStartup(ServletContext container) throws ServletException
{
//静态资源
container.getServletRegistration("default").addMapping("/resource/*"); AnnotationConfigWebApplicationContext rootContext =
new AnnotationConfigWebApplicationContext();
rootContext.register(RootContextConfiguration.class);
container.addListener(new ContextLoaderListener(rootContext)); AnnotationConfigWebApplicationContext servletContext =
new AnnotationConfigWebApplicationContext();
servletContext.register(ServletContextConfiguration.class);
ServletRegistration.Dynamic dispatcher = container.addServlet(
"springDispatcher", new DispatcherServlet(servletContext)
);
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}
}

Spring 快速开始 配置Spring Framework的更多相关文章

  1. 在eclipse中,使用spring tool suite配置spring环境

    本人第一次接触spring,在经过一天的努力之后,终于成功配置了spring环境. 使用spring tool suite配置 1.打开eclipse,选择help->Eclipse marke ...

  2. Spring 快速开始 启动Spring

    [启动Spring必须配置] [web.xml部署描述符方式] 1.配置Servlet级别上下文 <servlet> <servlet-name>springDispatche ...

  3. Spring MVC 零配置 / Spring MVC JavaConfig

    1. Spring MVC的核心就是DispatcherServlet类,Spring MVC处理请求的流程如下图所示: 2. Spring MVC中典型的上下文层次 当我们初始化一个Dispatch ...

  4. spring boot所有配置

    转载 http://blog.csdn.net/lpfsuperman/article/details/78287265 # 日志配置# 日志配置文件的位置. 例如对于Logback的`classpa ...

  5. Spring Boot自动配置如何工作

    通过使用Mongo和MySQL DB实现的示例,深入了解Spring Boot的@Conditional注释世界. 在我以前的文章“为什么选择Spring Boot?”中,我们讨论了如何创建Sprin ...

  6. 【Spring】Spring的数据库开发 - 1、Spring JDBC的配置和Spring JdbcTemplate的解析

    Spring JDBC 文章目录 Spring JDBC Spring JdbcTemplate的解析 Spring JDBC的配置 简单记录-Java EE企业级应用开发教程(Spring+Spri ...

  7. Spring全家桶之spring boot(一)

    spring boot框架抛弃了繁琐的xml配置过程,采用大量的默认配置简化我们的开发过程.使用spring boot之后就不用像以前使用ssm的时候添加那么多配置文件了,spring boot除了支 ...

  8. 【Spring Boot&&Spring Cloud系列】Spring Boot中使用数据库之MySql

    对于传统关系型数据库来说,Spring Boot使用JPA(Java Persistence API)资源库提供持久化的标准规范,即将Java的普通对象通过对象关系映射(ORM)持久化到数据库中. 项 ...

  9. Spring Boot系列二 Spring @Async异步线程池用法总结

    1. TaskExecutor Spring异步线程池的接口类,其实质是java.util.concurrent.Executor Spring 已经实现的异常线程池: 1. SimpleAsyncT ...

随机推荐

  1. HDU5909Tree Cutting

    题目大意 给定一颗树,每个点有点权,问对于每个m,有多少个联通块的权值异或和为m. 题解 解法1:可以考虑树形dp,设dp[u][i]表示以u为根的子树中u必须选,联通块权值异或值为i的联通块个数. ...

  2. [Vani有约会]雨天的尾巴(树上差分+线段树合并)

    首先村落里的一共有n座房屋,并形成一个树状结构.然后救济粮分m次发放,每次选择两个房屋(x,y),然后对于x到y的路径上(含x和y)每座房子里发放一袋z类型的救济粮. 然后深绘里想知道,当所有的救济粮 ...

  3. centos7安装mha4mysql

    mysql搭建mha需要用的两个rpm包.(manager包和node包) 下载地址:https://download.csdn.net/download/dajdajdajdaj/10603389 ...

  4. Docker普通用户不使用sudo提权

    解决方法 sudo groupadd docker 添加Docker用户组 sudo gpasswd -a ${USER} docker 添加你的用户到Docker用户组 reboot 重启系统.也可 ...

  5. 省选前的JOI

    RT,发现找不到题,于是又开了新坑 JOI特色:重思考,代码难度(相比NOI系列)基本没有 (省选前到处挖坑2333) JOI 2017 Final 焚风现象 差分,莫得了 (不是看到200ms就tm ...

  6. WinterAndSnowmen

    https://vjudge.net/problem/TopCoder-12891 暴力想法是:dp[i][s1][s2]前i个,第一个集合xor是s1,第二个集合xor是s2方案数O(n^3) 有x ...

  7. LOJ#2134 小园丁与老司机

    我的妈呀,这码农神题...... 第一问是个DP,要记录方案.先把纵向的转移建图.发现可以按照y坐标来划分阶段,每一层vector存一下,用前后缀最大值来转移. 第二问考虑所有可能成为最优方案的边.从 ...

  8. mysql视图和临时表的区别

    视图 视图是由从数据库的基本表中选出来的数据组成的逻辑窗口,它与基本表不同的是,视图是一个虚表.数据库中只存放视图的定义,而不存放视图包含的数据,这些数据仍存放在原来的基表中.所以基表中的数据如果发生 ...

  9. BigInteger与BigDecimal

    BigInteger与BigDecimal Java大数字运算(BigInteger类和BigDecimal类) 在 Java 中提供了用于大数字运算的类,即 java.math.BigInteger ...

  10. 第四篇:记录相关操作 SQL逻辑查询语句执行顺序

    http://www.cnblogs.com/linhaifeng/articles/7372774.html 一 SELECT语句关键字的定义顺序 SELECT DISTINCT <selec ...