2017-06-21 75 views
0

我創建bean類JavaMailSender和自動裝配的javamailsender但我得到錯誤如何在spring中創建bean類?

package com.websystique.springsecurity.service; 

import java.util.List; 

import javax.mail.MessagingException; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeMessage; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.core.io.FileSystemResource; 
import org.springframework.mail.MailParseException; 
import org.springframework.mail.SimpleMailMessage; 
import org.springframework.mail.javamail.JavaMailSender; 
import org.springframework.mail.javamail.MimeMessageHelper; 
import org.springframework.stereotype.Service; 
import org.springframework.transaction.annotation.Transactional; 

import com.websystique.springsecurity.dao.EmployeeDao; 
import com.websystique.springsecurity.model.Employee; 

@Service 
@Transactional 
public class EmployeeServiceImpl implements EmployeeService { 

@Autowired 
private EmployeeDao employeeDAOImpl; 
Employee Employee; 
@Autowired 
private JavaMailSender mailSender; 
@Autowired 
private SimpleMailMessage simpleMailMessage; 
public void setMailSender(JavaMailSender mailSender) { 
    this.mailSender = mailSender; 
} 
@Transactional 
public void addEmployee(Employee employee) { 
    employeeDAOImpl.addEmployee(employee); 
    StringBuilder subject = new StringBuilder(); 
    subject.append("User "); 
    subject.append(employee.getFirstname()); 
    subject.append(" "); 
    subject.append(employee.getLastname()); 
    subject.append(" has been added"); 
    String content = subject.toString()+" Successfully!"; 
    sendMail("", content,subject.toString(),employee.getEmail(),"D:\\log.pdf"); 
} 

@Transactional 
public List<Employee> getAllEmployees() { 
    return employeeDAOImpl.getAllEmployees(); 
} 

@Transactional 
public void deleteEmployee(Integer employeeId) { 
    employeeDAOImpl.deleteEmployee(employeeId); 
} 
@Transactional 
public Employee getEmployee(int empid) { 
    return employeeDAOImpl.getEmployee(empid); 
} 
@Transactional 
public Employee updateEmployee(Employee employee) { 

    Employee emp = employeeDAOImpl.updateEmployee(employee); 
    StringBuilder subject = new StringBuilder(); 
    subject.append("User "); 
    subject.append(emp.getFirstname()); 
    subject.append(" "); 
    subject.append(emp.getLastname()); 
    subject.append(" has been updated"); 
    String content = subject.toString()+" Successfully!"; 
    sendMail("", content,subject.toString(),emp.getEmail(),"D:\\log.pdf"); 
    return emp; 
} 
@Transactional 
public void setEmployeeDAO(EmployeeDao employeeDAO) { 
    this.employeeDAOImpl = employeeDAO; 
} 
@Transactional 
public void sendMail(String dear, String content,String subject,String 
toEmail,String filePath) { 
MimeMessage message = mailSender.createMimeMessage(); 
    try{ 
     MimeMessageHelper helper = new MimeMessageHelper(message, true); 

     helper.setFrom(new InternetAddress("[email protected]")); 
     helper.setTo(new InternetAddress(toEmail)); 
     helper.setSubject(subject); 
     helper.setText(content); 
     if(filePath!=null){ 
     FileSystemResource file = new FileSystemResource(filePath); 

     helper.addAttachment(file.getFilename(), file); 
     } 

    }catch (MessagingException e) { 
     throw new MailParseException(e); 
    } 
    mailSender.send(message); 


} 

} 

我無法創建豆ID =「mailSender」 bean類。我正在爲此工作兩天,請讓我擺脫它。

<context:component-scan base- 
package="com.websystique.springsecurity.controller" /> 


<bean 
class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="viewClass" 
value="org.springframework.web.servlet.view.JstlView" /> 
    <property name="prefix" value="/WEB-INF/views/" /> 
    <property name="suffix" value=".jsp" /> 
</bean> 

<mvc:resources mapping="/static/**" location="/static/" /> 

<mvc:annotation-driven conversion-service="conversionService"/> 

<bean id="conversionService" 
class="org.springframework.format.support.FormattingConversionService 
FactoryBean"> 

    <property name="converters"> 
     <list> 
      <bean id="roleToUserProfile" 
class="com.websystique.springsecurity.util.RoleToUserProfileConverter" /> 
     </list> 
    </property> 
</bean> 
    <bean id="mailSender" 
class="org.springframework.mail.javamail.JavaMailSenderImpl"> 
    <property name="host" value="smtp.gmail.com" /> 
    <property name="port" value="587" /> 
    <property name="username" value="[email protected]" /> 
    <property name="password" value="Saran2595" /> 

    <property name="javaMailProperties"> 
     <props> 
      <prop key="mail.transport.protocol">smtp</prop> 
      <prop key="mail.smtp.auth">true</prop> 
      <prop key="mail.smtp.starttls.enable">true</prop> 
     </props> 
    </property> 

</bean> 
<!-- 
<bean id="mailMail" class="com.mkyong.common.MailMail"> 
    <property name="mailSender" ref="mailSender" /> 
    <property name="simpleMailMessage" ref="customeMailMessage" /> 
</bean> 

<bean id="customeMailMessage" 
    class="org.springframework.mail.SimpleMailMessage"> 

    <property name="from" value="[email protected]" /> 
    <property name="subject" value="Customer Report" /> 
    <property name="text"> 
    <value> 
     <![CDATA[ 
      Dear %s, 
      Mail Content : %s 
     ]]> 
    </value> 
</property> 
</bean> --> 

</beans> 

和錯誤頁面

org.springframework.beans.factory.BeanCreationException:錯誤 創建名爲 'employeeController' 豆:自動裝配 依賴注入失敗;嵌套的例外是 org.springframework.beans.factory.BeanCreationException:無法 自動裝配領域:私人 com.websystique.springsecurity.service.EmployeeService com.websystique.springsecurity.controller.EmployeeController.employeeServiceImpl; 嵌套異常是 org.springframework.beans.factory.BeanCreationException:錯誤 創建名爲'employeeServiceImpl'的bean:注入自動裝配的 依賴關係失敗;嵌套的例外是 org.springframework.beans.factory.BeanCreationException:無法 自動裝配領域:私人 org.springframework.mail.javamail.JavaMailSender com.websystique.springsecurity.service.EmployeeServiceImpl.mailSender; 嵌套的異常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:否 [org.springframework.mail.javamail.JavaMailSender]類型的 排位豆找到 依賴性:預期至少1豆,其有資格作爲自動裝配 候選這種依賴性。依賴註解: {@ org.springframework.beans.factory.annotation.Autowired(所需=真)} 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334) 在 有機.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543) 在 org.springframework.beans .factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 在 org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:305) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 在 組織。 springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:301) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196) 在 org.springframework.beans。 factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772) 在 org.springframework.context.support.AbstractApplicationContext.finishBea nFactoryInitialization(AbstractApplicationContext.java:834) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:537) 在 組織。springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:446) 在 org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:328) 在 org.springframework.web.context.ContextLoaderListener。 contextInitialized(ContextLoaderListener.java:107) 在 org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4853) 在 org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5314) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) at org.apache.catalina.core.ContainerBase $ StartChild.c all(ContainerBase.java:1408) at org.apache.catalina.core.ContainerBase $ StartChild.call(ContainerBase.java:1398) at java.util.concurrent.FutureTask.run(FutureTask.java:266)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:617) 在java.lang.Thread.run(線程。 java:745)

+0

創建您的郵件發件人。一個'DispatcherServlet'可以從'ContextLoaderLIstener'中訪問bean,但不能以其他方式訪問。將它放在正確的xml文件中。 –

+0

感謝您的幫助,但我不知道哪個xml文件是正確的。該項目包含ApplicationContext.xml,spring-database.xml,dispactherservlets.xml和spring-sercurity.xml。其中xml是正確的xml文件 – saravana

+0

我是新來的春天所以不知道如何創建marshaller xml所以,請建議一些創建bean類的示例 – saravana

回答

0

您的組件掃描僅包含com.websystique.springsecurity.controller。所以它將無法掃描其他包來注入依賴關係。在頂層包(com.websystique.springsecurity)上啓用組件掃描並在xml文件中重寫bean定義(如果需要)。

+0

感謝您的關注,但我提到應用上下文Xml文件中的基本掃描軟件包(com.websystique.springsecurity) – saravana

0

在XML試試這個,如果它的工作原理是在`DispatcherServlet`不要了`ContextLoaderListener`恢復

+0

感謝您的幫助 – saravana