Spring Ioc总结

Spring Bean配置方法

方法基于XML配置基于Annotation配置基于Java类配置
Bean定义<bean class="...">@Component和衍生注解@Repository,@Service,@Controller在注解了@Configuration的java类中,对方法名注解@Bean,方法返回该类型的实例
Bean名称id或name@Component("name")@Bean("name")
Bean注入property@Autowired@Autowired
Bean生命过程方法init-method和destroy-method@PostContruct和@PreDestroy@Bean的initMethod和destroyMethod
Bean作用范围scrope属性@Scope("...")@Scope("...")
Bean延迟加载lazy-init属性@Lazy(true)@Lazy(true)
1. <context:annotation-config><context:component-scan>区别:

<context:annotation-config>用于激活已经在Spring容器中注册过的Bean,而<context:component-scan>除了有激活功能外,还可以在制定package下扫描注册Bean

2. scope
作用域定义
singleton默认参数,一个Spring容器中,一个Bean定义只有一个对象实例
prototype允许Bean的定义可以被实例化任意次
request一次HTTP请求中,每个Bean定义对应一个实例,仅限于Spring MVC
session一个HTTP Session中,每个Bean定义对应一个实例,仅限于Spring MVC
global-session全局HTTP Session中,对应一个实例,用于Portlet上下文
3. @Component
  • @Repository用于装饰DAO类,可以将将所标注的类中抛出的数据访问异常封装为 Spring 的数据访问异常类型

  • @Service 通常作用在业务层

  • @Constroller 通常作用在控制层

  • 通过在类上使用 @Repository、@Component、@Service 和 @Constroller 注解,Spring 会自动创建相应的 BeanDefinition 对象,并注册到 ApplicationContext 中。这些类就成了 Spring 受管组件。这三个注解除了作用于不同软件层次的类,其使用方式与 @Repository 是完全相同的。

  • 当一个 Bean 被自动检测到时,会根据那个扫描器的 BeanNameGenerator 策略生成它的 bean 名称。默认情况下,对于包含 name 属性的 @Component、@Repository、 @Service 和 @Controller,会把 name 取值作为 Bean 的名字。如果这个注解不包含 name 值或是其他被自定义过滤器发现的组件,默认 Bean 名称会是小写开头的非限定类名。

4. Autowiring
  • byName

  • byType

  • constructor

  • autodetect

  • autowire-candidate & primary

4. @Autowired & @Inject & @Resource
  • @Autowired默认按类型,可以修饰方法、构造器、属性,用required=false(判断给定 Bean 的相应 Setter 方法是否都在实例化的时候被调用了,而不是判断字段是否已经存在值了。)和@Qualifier(“…”)

  • @Inject可以修饰方法、构造器、属性,没有required=false(不存在抛出异常),@Named(“…”)

  • @Resource(name=”…”),属于J2EE

7. factory-method & factory-bean
  • 实现静态工厂,method必须为public static 方法

  • 实现工厂实例,指定factory-method和factory-bean

  • 实现FactoryBean接口

Spring例子
Spring官方文档
NetBeans wiki例子
SpringMVC NetBeans
碰到问题:
  • log4j的版本1和2对应web.xml配置不一样,log4j1对应的是:
<listener>
    <listener-class>
        org.springframework.web.util.Log4jConfigListener
    </listener-class>  
</listener>
而log4j2对应的是:
    <filter>
      <filter-name>log4jServletFilter</filter-name>
    org.apache.logging.log4j.web.Log4jServletFilter
      </filter-class>
  </filter>
  <filter-mapping>
      <filter-name>log4jServletFilter</filter-name>
      <url-pattern>/*</url-pattern>
      <dispatcher>REQUEST</dispatcher>
      <dispatcher>FORWARD</dispatcher>
      <dispatcher>FORWARD</dispatcher>
      <dispatcher>INCLUDE</dispatcher>
      <dispatcher>ERROR</dispatcher>
  </filter-mapping>
  • log4j文档

  • web.xml schema 版本问题

  • validation问题,还没搞清楚jsf的validation和hibernate-validator的关系,但@NotNull和@NotEmpty是有区别的,而http下取得的空值参数只能用@NotEmpty解决

  • oracle文档有对jsf的validation问题描述,链接

  • temp


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值