μλ‘
λ‘κ·ΈμΈ μ μ κΈ°λ‘ κΈ°λ₯μ κ°λ°νλ μ€μ΄μκ³ , λ‘κ·Έμμ μκ°λ κ°μ΄ κΈ°λ‘μ ν΄μΌ νλ€.
μ¬μ©μκ° λ‘κ·Έμμ λ²νΌμ ν΄λ¦νμ λμ λ‘κ·Έμμ μκ° κΈ°λ‘μ μ½κ² μ²λ¦¬ν μ μμλ€.
νμ§λ§ μΈμ
λ§λ£ μ μλ λ‘κ·Έμμ μκ°μ κΈ°λ‘νκ³ λΈλΌμ°μ λ₯Ό λ«μμ λμλ μλ λ‘κ·Έμμ μκ°μ κΈ°λ‘νλ λΆλΆμ ꡬννλ λ° μ΄λ €μμ΄ μμλ€.
κΈ°μ‘΄ μμ±λ μ½λμμλ νλ‘ νΈμμ μΈμ
μκ°μ΄ λ§λ£λλ©΄ /logout 컨νΈλ‘€λ¬ λ³΄λ΄ λ‘κ·Έμμ μ²λ¦¬λ₯Ό μ§ννκ³ μλ€.
κ·Έλμ μ΄ /logout 컨νΈλ‘€λ¬μμ λ‘κ·ΈμΈνλ μΈμ
μ 보λ₯Ό κ°μ Έμ λ‘κ·Έμμ μκ°μ κΈ°λ‘νκ³ , μΈμ
μ μμ νλ©΄ λκ² λ€κ³ μκ°μ νλ€.
λ¬Έμ : getSession()μ΄ nullμ΄λΌκ³ ?
ν.μ§.λ§.. λ¬Έμ λ μΈμ μκ°μ΄ μ’ λ£λλ©΄ μΈμ μ λ³΄κ° μλμΌλ‘ μμ λκΈ° λλ¬Έμ /logout 컨νΈλ‘€λ¬μμ getSession()μ νΈμΆν΄λ μΈμ μ λ³΄κ° nullλ‘ λ°νλλ€.
(HttpSessionListenerκ° μΈμ μ μ’ λ£λ₯Ό κ°μ§ν¨)
ν΄κ²° : HttpSessionListener μ΄μ©
첫 λ²μ§Έ ν΄κ²° : κ·Έλμ μ΄ HttpSessionListenerλ‘ μΈμ μ’ λ£ μμ λ‘κ·Έμμ μκ°μ κΈ°λ‘νλ©΄ λκ² λ€κ³ μκ°νλ€.
<listener>
<listener-class>example.com.listener.SessionTimeoutListener</listener-class>
</listener>
web.xmlμ listenerλ₯Ό λ±λ‘ν΄μ£Όκ³ νλμ ν΄λμ€λ₯Ό λ§λ€μ΄ HttpSessionListenerλ₯Ό implementsν΄ μ¬μ©ν μ μλ€.
example.com.listenerλ ν¨ν€μ§ μ΄λ¦μ΄κ³ , SessionTimeoutListenerλ ν΄λμ€ μ΄λ¦μ΄λ€.
package example.com.listener;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
public class SessionTimeoutListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
// μΈμ
μμ± μ λ‘μ§ νμνλ©΄ μ¬κΈ°μ μΆκ°
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
// μΈμ
μ’
λ£ μ λ‘μ§ νμνλ©΄ μ¬κΈ°μ μΆκ°
}
}
httpSessionListener μΈν°νμ΄μ€λ₯Ό implementsνμ¬ λ‘μ§μ μ¬μ μν μ μλ€.
sessionCreatedλ μΈμ μμ±μ μ€νλλ λ©μλμ΄κ³ , sessionDestroyedλ μΈμ μ’ λ£μ μ€νλλ λ©μλμ΄λ€.
sessionDestroyedμ λ‘κ·Έμμ μκ°μ κΈ°λ‘ν΄μ£Όλ μλΉμ€λ₯Ό μμ±νλ€.
λ¬Έμ 2: μλΉμ€ λΉμ΄ μ λλ‘ μ£Όμ λμ§ μμμ μλ¬κ° λ°μ @Autowired
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
public class SessionTimeoutListener implements HttpSessionListener {
@Autowired
private LoginLogService loginLogService; // @Autowiredλ‘ μ£Όμ
λ°μΌλ € μλνλ λΆλΆ (μλͺ»λ μ κ·Ό)
@Override
public void sessionCreated(HttpSessionEvent se) {
// μΈμ
μμ± μ λ‘μ§ νμνλ©΄ μ¬κΈ°μ
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
Object loginLogIdObj = se.getSession().getAttribute("loginLogId");
if (loginLogIdObj != null) {
Long loginLogId = Long.valueOf(loginLogIdObj.toString());
// λ‘κ·Έμμ μκ° κΈ°λ‘
loginLogService.updateLogoutTime(loginLogId);
} else {
System.out.println("Spring Contextλ₯Ό μ°Ύμ μ μμ");
}
} else {
System.out.println("μΈμ
λ§λ£, loginLogId μμ");
}
}
}
org.apache.catalina.session.StandardSession expire
SEVERE: μΈμ
μ΄λ²€νΈ 리μ€λκ° μμΈλ₯Ό λ°μμμΌ°μ΅λλ€.
java.lang.NullPointerException
at example.com.listener.SessionTimeoutListener.sessionDestroyed(SessionTimeoutListener.java:30)
at org.apache.catalina.session.StandardSession.expire(StandardSession.java:768)
at org.apache.catalina.session.StandardSession.isValid(StandardSession.java:628)
at org.apache.catalina.connector.Request.doGetSession(Request.java:2941)
at org.apache.catalina.connector.Request.getSessionInternal(Request.java:2677)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:451)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:670)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:928)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1786)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
at java.base/java.lang.Thread.run(Thread.java:834)
μ μλ¬λ₯Ό 보면 NullPointerException μλ¬κ° λ°μνλ€.
loginLogServiceλ₯Ό λΆλ¬μ μ¬μ©μ νλ €κ³ νλλ° loginLogServiceκ° Nullμ΄λΌλ μ€λ₯μ΄λ€.
μ?
@Autowiredλ Spring 컨ν μ€νΈμ λ±λ‘λ λΉμ μ£Όμ λ°λ λ°©μμ΄λ€. κ·Έλ¬λ HttpSessionListenerλ Spring 컨ν μ€νΈκ° μμ ν μ΄κΈ°νλκΈ° μ μ μ€νλλ€.(λΉμ λ±λ‘νκΈ° μ μ HttpSessionListenerκ° μ€νλλ κ²)
μ΄ λλ¬Έμ @Autowiredλ₯Ό μ¬μ©νμ¬ λΉμ μ£Όμ λ°μΌλ €κ³ νλ©΄, Spring 컨ν μ€νΈκ° μμ§ μ€λΉλμ§ μμκΈ° λλ¬Έμ ν΄λΉ λΉμ μ°Ύμ μ μλ€.(λΉμ°ν¨. λ±λ‘μ΄ μ λμΌλ λͺ»μ°Ύμ μ λ°μ)
κ°λ¨ν λ§νμλ©΄:
- 리μ€λλ Spring 컨ν μ€νΈκ° μ΄κΈ°νλκΈ° μ μ μ€νλ¨.
- λ°λΌμ Spring 컨ν μ€νΈ μ΄κΈ°ν μ μ @Autowiredλ‘ λΉμ μ£Όμ λ°μ μ μμ
κ³Ό κ°λ€.
ν΄κ²° : μ§μ 컨ν μ€νΈλ₯Ό μ°Έμ‘°νμ¬ λΉμ μ»μ΄μΌ νλ€.
WebApplicationContextUtils.getWebApplicationContext(servletContext)
1. context-common.xmlμ base-packageμ beanμ λ±λ‘ν΄μ€λ€.
<context:component-scan base-package="example.com.loginlog" />
<!-- mapper μΈμνλλ‘ λ±λ‘ -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="example.com.mapper"/>
</bean>
2. μ§μ νΈμΆνλ μλΉμ€λ₯Ό μμ±νλ€.
// Springμ ServletContextλ₯Ό ν΅ν΄ νμ¬ μΉ μ ν리μΌμ΄μ
μ μ μ μ 보λ₯Ό κ°μ Έμ¨λ€.
ServletContext servletContext = se.getSession().getServletContext();
// WebApplicationContextUtilsλ₯Ό μ¬μ©ν΄ Springμ ApplicationContext (μ¦, BeanFactory) λ₯Ό κ°μ Έμ¨λ€.
// μ΄ μ»¨ν
μ€νΈμμ μ°λ¦¬κ° νμν μλΉμ€ Beanμ μλμΌλ‘ μ»μ΄μ¬ μ μλ€.
WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(servletContext);
if (context != null) {
LoginLogService loginLogService = (LoginLogService) context.getBean("loginLogService");
// λ‘κ·Έμμ μκ° κΈ°λ‘
loginLogService.updateLogoutTime(loginLogId);
} else {
System.out.println("Spring Contextλ₯Ό μ°Ύμ μ μμ");
}
μ΄λ κ² μμ±νλλ μΈμ λ§λ£μμ, λΈλΌμ°μ λ₯Ό μ’ λ£νμ λμλ μλμΌλ‘ λ‘κ·Έμμ κΈ°λ‘ μλΉμ€κ° μ€νλμ΄ κΈ°λ‘μ΄ μ λλ‘ λμλ€.

ν μ€νΈλ₯Ό μν΄ λ‘κ·ΈμΈ μΈμ μ μ½ 2λΆμ λλ‘ λκ³ ν μ€νΈλ₯Ό μ§ννλ€!.
μ€λμ λ¬Έμ μ 리
1. μΈμ μμ±, λ§λ£ κ°μ§λ HttpSessionListenerλ‘ μ²λ¦¬νλ€.
β μΈμ μ΄ μμ±λ λμ μλ©Έλ λλ₯Ό μ€λ²λΌμ΄λνμ¬ μνλ λ‘μ§μ μμ±ν μ μλ€.
2. νμ§λ§ HttpSessionListenerλ Spring Beanμ΄ μλκΈ° λλ¬Έμ @Autowired λ±μΌλ‘ Bean μ£Όμ μ΄ λΆκ°λ₯νλ€.
β Spring Contextκ° μ΄κΈ°νλκΈ° μ μ λ¨Όμ λ±λ‘λκΈ° λλ¬Έ.
3. λ°λΌμ μ§μ Spring Contextμμ νμν Beanμ κΊΌλ΄μ μ¬μ©ν΄μΌ νλ€.
β WebApplicationContextUtils.getWebApplicationContext(servletContext)λ₯Ό μ¬μ©ν΄ Bean μλ νλ.
4. μ΄λ κ² μ§μ Beanμ κΊΌλ΄μ μ¬μ©νλ €λ©΄ context-common.xmlμ ν΄λΉ ν¨ν€μ§ λ±λ‘ λ° Mapper μ€μ μ΄ νμμ΄λ€.
'π±ππππππ > Spring' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Spring] μ μμ λΆ νλ μμν¬ μΈμ μκ° λ³κ²½νκΈ° (1) | 2025.04.25 |
---|
μλ‘
λ‘κ·ΈμΈ μ μ κΈ°λ‘ κΈ°λ₯μ κ°λ°νλ μ€μ΄μκ³ , λ‘κ·Έμμ μκ°λ κ°μ΄ κΈ°λ‘μ ν΄μΌ νλ€.
μ¬μ©μκ° λ‘κ·Έμμ λ²νΌμ ν΄λ¦νμ λμ λ‘κ·Έμμ μκ° κΈ°λ‘μ μ½κ² μ²λ¦¬ν μ μμλ€.
νμ§λ§ μΈμ
λ§λ£ μ μλ λ‘κ·Έμμ μκ°μ κΈ°λ‘νκ³ λΈλΌμ°μ λ₯Ό λ«μμ λμλ μλ λ‘κ·Έμμ μκ°μ κΈ°λ‘νλ λΆλΆμ ꡬννλ λ° μ΄λ €μμ΄ μμλ€.
κΈ°μ‘΄ μμ±λ μ½λμμλ νλ‘ νΈμμ μΈμ
μκ°μ΄ λ§λ£λλ©΄ /logout 컨νΈλ‘€λ¬ λ³΄λ΄ λ‘κ·Έμμ μ²λ¦¬λ₯Ό μ§ννκ³ μλ€.
κ·Έλμ μ΄ /logout 컨νΈλ‘€λ¬μμ λ‘κ·ΈμΈνλ μΈμ
μ 보λ₯Ό κ°μ Έμ λ‘κ·Έμμ μκ°μ κΈ°λ‘νκ³ , μΈμ
μ μμ νλ©΄ λκ² λ€κ³ μκ°μ νλ€.
λ¬Έμ : getSession()μ΄ nullμ΄λΌκ³ ?
ν.μ§.λ§.. λ¬Έμ λ μΈμ μκ°μ΄ μ’ λ£λλ©΄ μΈμ μ λ³΄κ° μλμΌλ‘ μμ λκΈ° λλ¬Έμ /logout 컨νΈλ‘€λ¬μμ getSession()μ νΈμΆν΄λ μΈμ μ λ³΄κ° nullλ‘ λ°νλλ€.
(HttpSessionListenerκ° μΈμ μ μ’ λ£λ₯Ό κ°μ§ν¨)
ν΄κ²° : HttpSessionListener μ΄μ©
첫 λ²μ§Έ ν΄κ²° : κ·Έλμ μ΄ HttpSessionListenerλ‘ μΈμ μ’ λ£ μμ λ‘κ·Έμμ μκ°μ κΈ°λ‘νλ©΄ λκ² λ€κ³ μκ°νλ€.
<listener>
<listener-class>example.com.listener.SessionTimeoutListener</listener-class>
</listener>
web.xmlμ listenerλ₯Ό λ±λ‘ν΄μ£Όκ³ νλμ ν΄λμ€λ₯Ό λ§λ€μ΄ HttpSessionListenerλ₯Ό implementsν΄ μ¬μ©ν μ μλ€.
example.com.listenerλ ν¨ν€μ§ μ΄λ¦μ΄κ³ , SessionTimeoutListenerλ ν΄λμ€ μ΄λ¦μ΄λ€.
package example.com.listener;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
public class SessionTimeoutListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
// μΈμ
μμ± μ λ‘μ§ νμνλ©΄ μ¬κΈ°μ μΆκ°
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
// μΈμ
μ’
λ£ μ λ‘μ§ νμνλ©΄ μ¬κΈ°μ μΆκ°
}
}
httpSessionListener μΈν°νμ΄μ€λ₯Ό implementsνμ¬ λ‘μ§μ μ¬μ μν μ μλ€.
sessionCreatedλ μΈμ μμ±μ μ€νλλ λ©μλμ΄κ³ , sessionDestroyedλ μΈμ μ’ λ£μ μ€νλλ λ©μλμ΄λ€.
sessionDestroyedμ λ‘κ·Έμμ μκ°μ κΈ°λ‘ν΄μ£Όλ μλΉμ€λ₯Ό μμ±νλ€.
λ¬Έμ 2: μλΉμ€ λΉμ΄ μ λλ‘ μ£Όμ λμ§ μμμ μλ¬κ° λ°μ @Autowired
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
public class SessionTimeoutListener implements HttpSessionListener {
@Autowired
private LoginLogService loginLogService; // @Autowiredλ‘ μ£Όμ
λ°μΌλ € μλνλ λΆλΆ (μλͺ»λ μ κ·Ό)
@Override
public void sessionCreated(HttpSessionEvent se) {
// μΈμ
μμ± μ λ‘μ§ νμνλ©΄ μ¬κΈ°μ
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
Object loginLogIdObj = se.getSession().getAttribute("loginLogId");
if (loginLogIdObj != null) {
Long loginLogId = Long.valueOf(loginLogIdObj.toString());
// λ‘κ·Έμμ μκ° κΈ°λ‘
loginLogService.updateLogoutTime(loginLogId);
} else {
System.out.println("Spring Contextλ₯Ό μ°Ύμ μ μμ");
}
} else {
System.out.println("μΈμ
λ§λ£, loginLogId μμ");
}
}
}
org.apache.catalina.session.StandardSession expire
SEVERE: μΈμ
μ΄λ²€νΈ 리μ€λκ° μμΈλ₯Ό λ°μμμΌ°μ΅λλ€.
java.lang.NullPointerException
at example.com.listener.SessionTimeoutListener.sessionDestroyed(SessionTimeoutListener.java:30)
at org.apache.catalina.session.StandardSession.expire(StandardSession.java:768)
at org.apache.catalina.session.StandardSession.isValid(StandardSession.java:628)
at org.apache.catalina.connector.Request.doGetSession(Request.java:2941)
at org.apache.catalina.connector.Request.getSessionInternal(Request.java:2677)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:451)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:670)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:928)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1786)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
at java.base/java.lang.Thread.run(Thread.java:834)
μ μλ¬λ₯Ό 보면 NullPointerException μλ¬κ° λ°μνλ€.
loginLogServiceλ₯Ό λΆλ¬μ μ¬μ©μ νλ €κ³ νλλ° loginLogServiceκ° Nullμ΄λΌλ μ€λ₯μ΄λ€.
μ?
@Autowiredλ Spring 컨ν μ€νΈμ λ±λ‘λ λΉμ μ£Όμ λ°λ λ°©μμ΄λ€. κ·Έλ¬λ HttpSessionListenerλ Spring 컨ν μ€νΈκ° μμ ν μ΄κΈ°νλκΈ° μ μ μ€νλλ€.(λΉμ λ±λ‘νκΈ° μ μ HttpSessionListenerκ° μ€νλλ κ²)
μ΄ λλ¬Έμ @Autowiredλ₯Ό μ¬μ©νμ¬ λΉμ μ£Όμ λ°μΌλ €κ³ νλ©΄, Spring 컨ν μ€νΈκ° μμ§ μ€λΉλμ§ μμκΈ° λλ¬Έμ ν΄λΉ λΉμ μ°Ύμ μ μλ€.(λΉμ°ν¨. λ±λ‘μ΄ μ λμΌλ λͺ»μ°Ύμ μ λ°μ)
κ°λ¨ν λ§νμλ©΄:
- 리μ€λλ Spring 컨ν μ€νΈκ° μ΄κΈ°νλκΈ° μ μ μ€νλ¨.
- λ°λΌμ Spring 컨ν μ€νΈ μ΄κΈ°ν μ μ @Autowiredλ‘ λΉμ μ£Όμ λ°μ μ μμ
κ³Ό κ°λ€.
ν΄κ²° : μ§μ 컨ν μ€νΈλ₯Ό μ°Έμ‘°νμ¬ λΉμ μ»μ΄μΌ νλ€.
WebApplicationContextUtils.getWebApplicationContext(servletContext)
1. context-common.xmlμ base-packageμ beanμ λ±λ‘ν΄μ€λ€.
<context:component-scan base-package="example.com.loginlog" />
<!-- mapper μΈμνλλ‘ λ±λ‘ -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="example.com.mapper"/>
</bean>
2. μ§μ νΈμΆνλ μλΉμ€λ₯Ό μμ±νλ€.
// Springμ ServletContextλ₯Ό ν΅ν΄ νμ¬ μΉ μ ν리μΌμ΄μ
μ μ μ μ 보λ₯Ό κ°μ Έμ¨λ€.
ServletContext servletContext = se.getSession().getServletContext();
// WebApplicationContextUtilsλ₯Ό μ¬μ©ν΄ Springμ ApplicationContext (μ¦, BeanFactory) λ₯Ό κ°μ Έμ¨λ€.
// μ΄ μ»¨ν
μ€νΈμμ μ°λ¦¬κ° νμν μλΉμ€ Beanμ μλμΌλ‘ μ»μ΄μ¬ μ μλ€.
WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(servletContext);
if (context != null) {
LoginLogService loginLogService = (LoginLogService) context.getBean("loginLogService");
// λ‘κ·Έμμ μκ° κΈ°λ‘
loginLogService.updateLogoutTime(loginLogId);
} else {
System.out.println("Spring Contextλ₯Ό μ°Ύμ μ μμ");
}
μ΄λ κ² μμ±νλλ μΈμ λ§λ£μμ, λΈλΌμ°μ λ₯Ό μ’ λ£νμ λμλ μλμΌλ‘ λ‘κ·Έμμ κΈ°λ‘ μλΉμ€κ° μ€νλμ΄ κΈ°λ‘μ΄ μ λλ‘ λμλ€.

ν μ€νΈλ₯Ό μν΄ λ‘κ·ΈμΈ μΈμ μ μ½ 2λΆμ λλ‘ λκ³ ν μ€νΈλ₯Ό μ§ννλ€!.
μ€λμ λ¬Έμ μ 리
1. μΈμ μμ±, λ§λ£ κ°μ§λ HttpSessionListenerλ‘ μ²λ¦¬νλ€.
β μΈμ μ΄ μμ±λ λμ μλ©Έλ λλ₯Ό μ€λ²λΌμ΄λνμ¬ μνλ λ‘μ§μ μμ±ν μ μλ€.
2. νμ§λ§ HttpSessionListenerλ Spring Beanμ΄ μλκΈ° λλ¬Έμ @Autowired λ±μΌλ‘ Bean μ£Όμ μ΄ λΆκ°λ₯νλ€.
β Spring Contextκ° μ΄κΈ°νλκΈ° μ μ λ¨Όμ λ±λ‘λκΈ° λλ¬Έ.
3. λ°λΌμ μ§μ Spring Contextμμ νμν Beanμ κΊΌλ΄μ μ¬μ©ν΄μΌ νλ€.
β WebApplicationContextUtils.getWebApplicationContext(servletContext)λ₯Ό μ¬μ©ν΄ Bean μλ νλ.
4. μ΄λ κ² μ§μ Beanμ κΊΌλ΄μ μ¬μ©νλ €λ©΄ context-common.xmlμ ν΄λΉ ν¨ν€μ§ λ±λ‘ λ° Mapper μ€μ μ΄ νμμ΄λ€.
'π±ππππππ > Spring' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Spring] μ μμ λΆ νλ μμν¬ μΈμ μκ° λ³κ²½νκΈ° (1) | 2025.04.25 |
---|