spring中通过配置文件注入的方法
通过配置文件注入的方法
马克-to-win:上面的注入方法是通过@Service的注解方法。类似的还有@Repository、@Component、 @Constroller,功能大体一样,就是实例化以后放到Spring容器当中接受管理。当然你肯定乐意在service类前放@Service而不愿意放@Repository而故意迷惑自己。另外注意,缺省的情况都是单态的。(省我们事了,但要注意线程安全)。除了注解注入,我们还有配置文件的方法来注入。相比注解的方法来讲,配置文件的方法比较集中,但缺乏灵活性。怎么讲呢?a处和b处想按不同的方式来处理?不行。因为统一一个地方处理。a和b 必须统一,所以缺少了灵活性。马克- to-win:马克 java社区:防盗版实名手机尾号: 73203
例 1.2
package com;
import javax.annotation.Resource;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.support.RequestContextUtils;
import service.interfac.ILoginService;
@Controller
public class HelloWorldController {
private ILoginService loginServic;
@RequestMapping("/helloa")
public ModelAndView helloWorld(HttpServletRequest request, HttpServletResponse response,
HttpSession sesssion) {
ServletContext sc=RequestContextUtils.getWebApplicationContext(request).getServletContext();
WebApplicationContext wac=WebApplicationContextUtils.getRequiredWebApplicationContext(sc);
ILoginService loginServic=(ILoginService)wac.getBean("loginService");
loginServic.login();
System.out.println("after loginServic.login()");
return new ModelAndView("/helloq", "message", "你好");
}
}
注意上面Controller中的WebApplicationContext wac=WebApplicationContextUtils.getRequiredWebApplicationContext(sc);这句话要想工作,必须在web.xml中加入ContextLoaderListener,因为ServletContext是我们在jsp那时学的,是 Tomcat提供的一个最大的范围,存放键值对。而WebApplicationContext是Spring提供的一个工具,去配置文件中查找 bean。配置文件在哪?它需要知道.怎么知道?在web.xml中的ContextLoaderListener的 contextConfigLocation参数。
在web.xml中加入下面的语句:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-servlet.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
在spring-servlet.xml中加入如下的内容:
<bean id="NiutDAO" class="com.NiutDAO">
</bean>
<bean id="loginService" class="service.LoginServiceImpl" >
<property name="niutDAO">
<ref bean="NiutDAO" />
</property>
</bean>
package service;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Service;
import com.NiutDAO;
import service.interfac.ILoginService;
public class LoginServiceImpl implements ILoginService {
NiutDAO niutDAO;
// public NiutDAO getNiutDAO() {
// return niutDAO;
// }
/*本例中没有下面的setter不能工作*/
public void setNiutDAO(NiutDAO niutDAO) {
this.niutDAO = niutDAO;
}
public void login() {
System.out.println("LoginServiceImpl");
}
/*需要在src目录中加入applicationContext.xml,才能用main来测试
<?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="NiutDAO" class="com.NiutDAO">
</bean>
<bean
id="loginService"
class="service.LoginServiceImpl" >
<property name="niutDAO">
<ref bean="NiutDAO" />
</property>
</bean>
</beans>
*/
public static void main(String[] args)
{
ClassPathXmlApplicationContext cp= new ClassPathXmlApplicationContext("applicationContext.xml");
ILoginService ls=(ILoginService)cp.getBean("loginService");
ls.login();
}
}
package com;
public class NiutDAO {
}