saravana
saravana

Reputation: 1

How to create the bean class in spring?

I am creating bean class of JavaMailSender and autowired the javamailsender but i getting error

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);


}

 }

I couldn't create the bean class for bean id="mailSender". i am working on it for past two days please get me out of it.

<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>

And error page

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'employeeController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.websystique.springsecurity.service.EmployeeService com.websystique.springsecurity.controller.EmployeeController.employeeServiceImpl; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'employeeServiceImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.springframework.mail.javamail.JavaMailSender com.websystique.springsecurity.service.EmployeeServiceImpl.mailSender; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.mail.javamail.JavaMailSender] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:305) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:301) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:834) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:537) at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:446) at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:328) at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107) at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4853) at 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.call(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) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)

Upvotes: 0

Views: 636

Answers (2)

Isaq S
Isaq S

Reputation: 23

Try this in your xml and if it works revert back

Upvotes: 0

Sangam Belose
Sangam Belose

Reputation: 4506

your component scan includes only com.websystique.springsecurity.controller. So it will not be able to scan other packages to inject the dependencies. enable the component scan on top package(com.websystique.springsecurity) and override bean definations (if required) in xml file.

Upvotes: 0

Related Questions