首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

spring 学习二-Spring Configuration in detail

2013-11-08 
spring 学习2-Spring Configuration in detail1.Bean Life-Cycle Management?bean idsimpleBean1 init

spring 学习2-Spring Configuration in detail

1.Bean Life-Cycle Management

?

<bean id="simpleBean1" init-method="init" /> 

?

<bean id="destructiveBean" destroy-method="destroy"/>

?

public class SimpleBeanWithInterface implements InitializingBean{ private static final String DEFAULT_NAME = "Luke Skywalker"; private String name = null; private int age = Integer.MIN_VALUE; public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public void myInit() { System.out.println("My Init"); } public void afterPropertiesSet() throws Exception { System.out.println("Initializing bean"); if (name == null) { System.out.println("Using default name"); name = DEFAULT_NAME; } 

?

public class DestructiveBeanWithInterface implements InitializingBean, DisposableBean{ private InputStream is = null; public String filePath = null; public void afterPropertiesSet() throws Exception { System.out.println("Initializing Bean"); if (filePath == null) { throw new IllegalArgumentException( "You must specify the filePath property of " + DestructiveBean.class); } is = new FileInputStream(filePath); } public void destroy() { System.out.println("Destroying Bean"); if (is != null) { try {  is.close(); is = null; } catch (IOException ex) { System.err.println("WARN: An IOException occured" + " trying to close the InputStream"); } } } public void setFilePath(String filePath) { this.filePath = filePath; }

?

public class SimpleBeanWithJSR250 { // Codes omitted @PostConstruct public void init() throws Exception { // Rest of codes omitted } } 

?

public class DestructiveBeanWithJSR250 { private InputStream is = null; public String filePath = null; @PostConstruct public void afterPropertiesSet() throws Exception { System.out.println("Initializing Bean"); if (filePath == null) { throw new IllegalArgumentException( "You must specify the filePath property of " + DestructiveBean.class); } is = new FileInputStream(filePath); } @PreDestroy public void destroy() { System.out.println("Destroying Bean"); if (is != null) { try { is.close(); is = null; } catch (IOException ex) { System.err.println("WARN: An IOException occured" + " trying to close the InputStream"); } } } public void setFilePath(String filePath) { this.filePath = filePath; } 

?2.Making Your Beans “Spring Aware”

?

?

public class ShutdownHookBean implements ApplicationContextAware { private ApplicationContext ctx; public void setApplicationContext(ApplicationContext ctx) throws BeansException { if (ctx instanceof GenericApplicationContext) { ((GenericApplicationContext) ctx).registerShutdownHook(); } } } 

?

<bean id="destructiveBean" name="code">public static void main(String[] args) { GenericXmlApplicationContext ctx = new GenericXmlApplicationContext(); ctx.load("classpath:appContext/messageSource.xml"); ctx.refresh(); Locale english = Locale.ENGLISH; Locale czech = new Locale("cs", "CZ"); System.out.println(ctx.getMessage("msg", null, english)); System.out.println(ctx.getMessage("msg", null, czech)); System.out.println(ctx.getMessage("nameMsg", new Object[] { "Clarence", "Ho" }, english)); } 
<bean id="messageSource" name="code">public class MessageEvent extends ApplicationEvent { private String msg; public MessageEvent(Object source, String msg) { super(source); this.msg = msg; } public String getMessage() { return msg; } } 

?

public class MessageEventListener implements ApplicationListener<MessageEvent> { public void onApplicationEvent(MessageEvent event) { MessageEvent msgEvt = (MessageEvent) event; System.out.println("Received: " + msgEvt.getMessage()); } } 

?

public class Publisher implements ApplicationContextAware { private ApplicationContext ctx; public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext( "classpath:events/events.xml"); Publisher pub = (Publisher) ctx.getBean("publisher"); pub.publish("Hello World!"); pub.publish("The quick brown fox jumped over the lazy dog"); } public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.ctx = applicationContext; } public void publish(String message) { ctx.publishEvent(new MessageEvent(this, message)); } }

?

<bean id="publisher" name="code">public static void main(String[] args) throws Exception{ ApplicationContext ctx = new ClassPathXmlApplicationContext( "classpath:events/events.xml"); Resource res1 = ctx.getResource("file:///d:/temp/test.txt"); displayInfo(res1); Resource res2 = ctx.getResource("classpath:test.txt"); displayInfo(res2); Resource res3 = ctx.getResource("http://www.google.co.uk"); displayInfo(res3); } private static void displayInfo(Resource res) throws Exception{ System.out.println(res.getClass()); System.out.println(res.getURL().getContent()); System.out.println(""); //getFile(), getInputStream(), or getURL()}6. Java Configuration
@Configuration public class AppConfig { // XML: // <bean id="messageProvider" // p:messageProvider-ref="messageProvider"/> @Bean public MessageRenderer messageRenderer() { MessageRenderer renderer = new StandardOutMessageRenderer(); // Setter injection renderer.setMessageProvider(messageProvider()); return renderer; } 
?

?

@Configuration @Import(OtherConfig.class) // XML: <import resource="classpath:events/events.xml") @ImportResource(value="classpath:events/events.xml") // XML: <context:property-placeholder location="classpath:message.properties"/> @PropertySource(value="classpath:message.properties") // XML: <context:component-scan base-package="com.apress.prospring3.ch5.context"/> @ComponentScan(basePackages={"com.apress.prospring3.ch5.context"}) @EnableTransactionManagement public class AppConfig { @Autowired Environment env; // XML: // <bean id="messageProvider" // p:messageProvider-ref="messageProvider"/> @Bean(name="messageRenderer") @Scope(value="prototype") // XML: <bean ... scope="prototype"/> @DependsOn(value="messageProvider") // XML: <bean ... depends-on="messageProvider"/> public MessageRenderer messageRenderer() { MessageRenderer renderer = new StandardOutMessageRenderer(); // Setter injection renderer.setMessageProvider(messageProvider()); return renderer; } } 

?7.ConfigurableEnvironment env = ctx.getEnvironment();?

MutablePropertySources propertySources = env.getPropertySources();?

8.JSR-330

@Named("messageRenderer") @Singleton public class StandardOutMessageRenderer implements MessageRenderer { @Inject @Named("messageProvider") private MessageProvider messageProvider = null; public void render() { if (messageProvider == null) { throw new RuntimeException( "You must set the property messageProvider of class:" + StandardOutMessageRenderer.class.getName()); } System.out.println(messageProvider.getMessage()); } public void setMessageProvider(MessageProvider provider) { this.messageProvider = provider; } public MessageProvider getMessageProvider() { return this.messageProvider; } } 

?

?

?

?

?

热点排行