在苹果手机上手机看电影没声音有声音没有图片这是怎么回事

leizhimin 的BLOG
用户名:leizhimin
文章数:725
评论数:2703
注册日期:
阅读量:5863
阅读量:12276
阅读量:366449
阅读量:1061535
51CTO推荐博文
Spring BeanFactory实例化Bean的过程
Bean的实例化是Bean生命周期的一个非常重要的环节,一般来说,初始化后,就不再改变了,直到bean被从BeanFactory中显式的移除。
当从BeanFactory中通过getBean()方法获取一个bean的时候,BeanFactory会经过如下的步骤来构建Bean的实例,这正是实例化Bean的过程:
1、调用Bean的默认构造方法,或者在指定的构造方法,生成bean实例(暂称为instance1);
3、如果Bean的配置文件中注入了Bean属性值,则在instance1基础上进行属性注入形成instance2,这种注入是覆盖性的。
2、如果Bean实现了InitializingBean接口,则调用afterPropertiesSet()方法,来改变或操作instance2,得到instance3;
4、如果Bean的配置文件中指定了init-method="init"属性,则会调用指定的初始化方法,则在instance3的基础上调用初始化方法init(),将对象最终初始化为instance4;当然,这个初始化的名字是任意的。
实际上,instance1、2、3、4仅仅是一个实例在不同阶段的状态。
下面给一个简单的例子验证一下上面的结论:
public class Person implements InitializingBean, DisposableBean { &&&&private S &&&&private int &&&&public Person(){ &&&&&&&&System.out.println("--------|| 构造方法在调用..."); &&&&&&&&this.name = "默认用户名"; &&&&&&&&this.age= 250; &&&&&&&&System.out.println(this); &&&&} &&&&public String getName() { &&&&&&&&return &&&&} &&&&public void setName(String name) { &&&&&&&&this.name = &&&&} &&&&public int getAge() { &&&&&&&&return &&&&} &&&&public void setAge(int age) { &&&&&&&&this.age = &&&&} &&&&public String toString() { &&&&&&&&return "Person{" + &&&&&&&&&&&&&&&&"name='" + name + '\'' + &&&&&&&&&&&&&&&&", age=" + age + &&&&&&&&&&&&&&&&'}'; &&&&} &&&&public void init(){ &&&&&&&&System.out.println("--------|| init()正在调用..."); &&&&&&&&this.name="init"; &&&&&&&&this.age=998; &&&&&&&&System.out.println(this); &&&&} &&&&public void afterPropertiesSet() throws Exception { &&&&&&&&System.out.println("--------|| afterPropertiesSet()正在调用..."); &&&&&&&&this.age=999; &&&&&&&&System.out.println(this); &&&&} &&&&public void destroy() throws Exception { &&&&&&&&System.out.println("--------|| destroy()正在调用..."); &&&&} }
public class BeanContextHelper { &&&&private static ApplicationContext _ &&&&static { &&&&&&&&if (_instance == null) _instance = buildApplicationContext(); &&&&} &&&&private BeanContextHelper() { &&&&} &&&&/** &&&& * 重新构建ApplicationContext对象 &&&& * &&&& * @return ApplicationContext &&&& */ &&&&public static ApplicationContext buildApplicationContext() { &&&&&&&&return new ClassPathXmlApplicationContext("applicationContext.xml"); &&&&} &&&&/** &&&& * 获取一个ApplicationContext对象 &&&& * &&&& * @return ApplicationContext &&&& */ &&&&public static ApplicationContext getApplicationContext() { &&&&&&&&return _ &&&&} }
&?xml version="1.0" encoding="UTF-8"?& &!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"& &beans& &&&&&bean id="person" class="com.lavasoft.springnote.ch01.Person" init-method="init" destroy-method="destroy"& &&&&&&&&&property name="name"& &&&&&&&&&&&&&value&lavasoft&/value& &&&&&&&&&/property& &&&&&&&&&property name="age"& &&&&&&&&&&&&&value&22&/value& &&&&&&&&&/property& &&&&&/bean& &/beans&
/** * Created by IntelliJ IDEA.&br& * &b&User&/b&: leizhimin&br& * &b&Date&/b&:
16:58:07&br& * &b&Note&/b&: 客户端测试 */ public class Test { &&&&public static void main(String args[]) { &&&&&&&&Test test = new Test(); &&&&&&&&test.test(); &&&&} &&&&public void test(){ &&&&&&&&ApplicationContext context = BeanContextHelper.getApplicationContext(); &&&&&&&&Person person = (Person) context.getBean("person"); &&&&&&&&System.out.println("--------|| 从Spring BeanFactory获取person..."); &&&&&&&&System.out.println(person); &&&&} }
运行结果:
--------|| 构造方法在调用... log4j:WARN No appenders could be found for logger (org.springframework.core.CollectionFactory). log4j:WARN Please initialize the log4j system properly. Person{name='默认用户名', age=250} --------|| afterPropertiesSet()正在调用... Person{name='lavasoft', age=999} --------|| init()正在调用... Person{name='init', age=998} --------|| 从Spring BeanFactory获取person... Person{name='init', age=998} Process finished with exit code 0
从控制台打印出来的信息可以很清楚看明白Bean实例化的过程。
对Person中实现的几个接口功能做个简单介绍:
BeanNameAware只有一个方法void setBeanName(String name),用来设置bean的名字.DisposableBean为Bean的销毁提供回调功能,在bean实例销毁前调用接口的destroy()方法.InitializingBeanSpirng的InitializingBean为bean提供了定义初始化方法的方式。InitializingBean是一个接口,它仅仅包含一个方法:afterPropertiesSet()。
&本文出自 “” 博客,转载请与作者联系!
了这篇文章
类别:┆阅读(0)┆评论(0)
本文收录至博客专题:《》Spring学习之实例化bean的三种方式 - 博客频道 - CSDN.NET
思考、奋斗、坚持
分类:Spring
实例化bean的三种方式
构造器实例化bean
Person.java
public class Person {
public Person() {
System.out.println("这是一个无参构造函数");
public Person(String name) {
this.name =
System.out.println("带有name="+name+"参数的构造函数");
public Person(String name, Integer age) {
this.name =
this.age =
System.out.println("带有名字="+name+"和年龄="+age+"参数的构造函数");
applicationContext.xml:
&?xml version="1.0" encoding="UTF-8"?&
&beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"&
&bean id="person" class="com.dfdc.spring.demo.Person"&&/bean&
&bean id="personWithParam" class="com.dfdc.spring.demo.Person"&
&constructor-arg name="name" value="等风的草"/&
&bean id="personWirhParams" class="com.dfdc.spring.demo.Person"&
&constructor-arg name="name" value="等风的草"/&
&constructor-arg name="age" value="21"/&
以下将省略DTD部分。
测试方法:
//以下将省略这行
private static final String configLocation = "applicationContext.xml";
*构造函数实例化bean
public void constructTest() {
ApplicationContext context = new ClassPathXmlApplicationContext(configLocation);
//Person p = (Person) context.getBean("person");//不带参数
//Person p = (Person) context.getBean("personWirhParam");//带一个参数
Person p = (Person) context.getBean("personWirhParams");//带多个参数
静态工厂实例化bean
当采用静态工厂方法创建bean时,除了需要指定class属性外,还需要通过factory-method属性来指定创建bean实例的工厂方法。
Spring将调用此方法返回实例对象,就此而言,跟通过普通构造器创建类实例没什么两样。
下面的bean定义展示了如何通过工厂方法来创建bean实例。
注意,此定义并未指定返回对象的类型,仅指定该类包含的工厂方法。在此例中,createInstance()必须是一个static方法。
&bean id="personStaticFactory" class="com.dfdc.spring.demo.PersonStaticFactory" factory-method="createInstance"/&
&bean id="personStaticFactoryWithParam" class="com.dfdc.spring.demo.PersonStaticFactory" factory-method="createInstance"&
&constructor-arg name="name" value="等风的草"/&
&bean id="personStaticFactoryParams" class="com.dfdc.spring.demo.PersonStaticFactory" factory-method="createInstance"&
&constructor-arg name="name" value="等风的草"/&
&constructor-arg name="age" value="21"/&
添加新bean,PersonStaticFactory.java:
* 静态工厂方法实例化bean
public static Person createInstance() {
return new Person();
public static Person createInstance(String name) {
return new Person(name);
public static Person createInstance(String name,Integer age) {
return new Person(name,age);
测试代码:
ApplicationContext context = new ClassPathXmlApplicationContext(configLocation);
context.getBean("personStaticFactory");
context.getBean("personStaticFactoryWithParam");
context.getBean("personStaticFactoryWithParams");
spring调用工厂方法产生对象,但是真正创建对象还是由程序员来完成的。
spring配置文件中,只要是一个bean就会为该bean创建对象。
实例工厂实例化bean
与使用静态工厂方法实例化类似,用来进行实例化的非静态实例工厂方法位于另外一个bean中(即下面的InstanceFactory.java),容器将调用该bean的工厂方法来创建一个新的bean实例。
为使用此机制,class属性必须为空,而factory-bean 属性必须指定为当前(或其祖先)容器中包含工厂方法的bean的名称,而该工厂bean的工厂方法本身必须通过factory-method属性来设定。
添加实例工厂bean,InstanceFactory.java:
public class InstanceFactory {
public Person createInstance() {
return new Person();
public Person createInstance(String name) {
return new Person(name);
public Person createInstance(String name,Integer age) {
return new Person(name,age);
applicationContext.xml:
&!--实例化工厂实例化bean
&bean id="instancefactory" class="com.dfdc.spring.demo.InstanceFactory"/&
&bean id="personInstance" factory-bean="instancefactory" factory-method="createInstance"/&
&bean id="personInstanceWithParam" factory-bean="instancefactory" factory-method="createInstance"&
&constructor-arg name="name" value="等风的草"/&
&bean id="personInstanceWithParams" factory-bean="instancefactory" factory-method="createInstance"&
&constructor-arg name="name" value="等风的草"/&
&constructor-arg name="age" value="21"/&
测试代码:
* 实例工厂实例化bean
public void instanceFactoryTest() {
ApplicationContext context = new ClassPathXmlApplicationContext(configLocation);
context.getBean("personInstance");
以上。。。
排名:千里之外
(8)(5)(3)(15)(2)(5)(4)(3)(4)(0)(3)(2)(4)(3)(2)(5)(1)(6)(0)(1)(5)(1)(1)(0)(1)(1)(1)Spring基础入门一:基于XML配置完成Spring对Bean的实例化 - 我的IT技术杂谈 - ITeye技术网站
博客分类:
一、基于XML配置的Spring对Bean的实例化:有三种方式:类的构造器,静态工厂,实例工厂
&beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"&
&!-- Spring三种实例化Bean之一:使用类构造器实例化 --&
&bean id="personService"
class="base.service.imple.PersonServiceImple"&
&!-- Spring三种实例化Bean之二:使用静态工厂方法实例化 --&
&bean id="personService2"
class="base.factory.StaticBuildBeanFactroy"
factory-method="createPersonService"&
&!-- Spring三种实例化Bean之三:使用实例工厂方法实例化 --&
&bean id="buildBeanFactory" class="base.factory.BuildBeanFactory"&&/bean&
&bean id="personService3" factory-bean="buildBeanFactory"
factory-method="createPersonService"&
Bean的接口:
package base.
public interface PersonService {
public void save();
Bean的实现:
public class PersonServiceImple implements PersonService {
// 一个普通的方法,可以在beans.xml设置成它为在构造方法执行完后就执行的方法
public void init() {
System.out.println("初始化方法");
// 一个普通的方法,可以在beans.xml设置成它为在Spring容器关闭后执行的方法
// (若该Bean的scope为prototype时则不会执行)
public void destroy() {
System.out.println("销毁方法");
// 构造方法(用来显示实例始化了)
public PersonServiceImple() {
System.out.println("实例化了...");
public void save() {
System.out.println("PersonServiceImple的save()方法");
两个Bean工厂如下:
* 实例工厂构造Bean
* @author 张明学
public class BuildBeanFactory {
public PersonService createPersonService() {
return new PersonServiceImple();
* 静态工厂构造Bean
* @author 张明学
public class StaticBuildBeanFactroy {
public static PersonService createPersonService() {
return new PersonServiceImple();
public static void main(String[] args) {
// Spring 容器初始化
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
// 多个Spring配置文件可以作为一个数组
// context = new ClassPathXmlApplicationContext(new String[] {
// "beans.xml" });
PersonService personService =
//personService = (PersonService) context.getBean("personService");
//personService = (PersonService) context.getBean("personService2");
personService = (PersonService) context.getBean("personService3");
personService.save();
Spring2.5为Bean提供了几中模式:singleton(默认配置),prototype,request,session,global session
还可以设置Bean实例的时机,可以在容器启动时构造实例(默认配置)也可在第一次使用时构造实例。
还有一些其配置如下:
scope默认为:singleton 单例模式
设置为:prototype 每次得到一个新的实例对象
还有:request,session,global session
lazy-init: true
表示:该Bean延迟初始化,不是Spring容器初始化时就初始化
false(默认值) 表示:不以该Bean延迟初始化,即Spring容器初始化时就初始化
在beans设置default-lazy-init可以为该beans里所有的bean设置一个默认的lazy-init的值
设置了scope为“prototype”时:lazy-init无论是true还是false都是延迟初始化
init-method 设置为:该bean中的某个方法在构造方法执行完就执行的方法
destroy-method 设置为:在Spring空器关闭之后执行的方法(若将该bean的scope设置为prototype则不会执行)
&bean id="personService4"
class="base.service.imple.PersonServiceImple" scope="prototype"
lazy-init="true" init-method="init" destroy-method="destroy"&
测试如下:
public static void main(String[] args) {
AbstractApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
PersonService p1 = (PersonService) ctx.getBean("personService4");
PersonService p2 = (PersonService) ctx.getBean("personService4");
* 在默认情况下:scope为singleton单例模式 prototype每次会得到一个新的实例
System.out.println(p1 == p2);
// 关闭Spring的容器
ctx.close();
论坛回复 /
(10 / 5564)
希望LZ能够继续写好。
xiaobojava
浏览: 629677 次
来自: 上海
暂停后重新下载就会报错:ClientAbortExceptio ...
暂停后重新下载报错啊
感谢!提供jar包!2008年1月 Java大版内专家分月排行榜第二
本帖子已过去太久远了,不再提供回复功能。各种框架实践(32)
分为以下几种Bean&
1. 如果指定的是convertrService,beanPostProcessor等实例的时候,则会在ApplicationContext初始化的时候就实例化.&
2. 如果指定的是自定义的Bean,那么会在第一次访问的时候实例化.&
[被依赖的时候实例化,更明确的说是第一次访问]&
&bean id=&& name=&&&这样这个bean是否会被实例化&
答案:不会实例化,ApplicationContext只会加载Bean的BeanDefinition.&
beanPostProcessor介绍:
/blog/2094549
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:47015次
积分:3334
积分:3334
排名:第7837名
原创:281篇
转载:51篇
(12)(27)(20)(31)(33)(136)(12)(4)(3)(14)(8)(7)(3)(12)(2)(1)(1)(1)(3)(1)(1)(4)(1)(1)(1)

我要回帖

更多关于 手机看电影声音不同步 的文章

 

随机推荐