当前位置: 首页 > 知识库问答 >
问题:

如何在spring中创建bean类?

包谭三
2023-03-14

我正在创建JavaMailSender的bean类,并自动拥有javamailsender,但我得到错误

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("saranpartneritech@gmail.com"));
        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);


}

 }

我不能为bean id="mail Sender"创建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="saranpartneritech@gmail.com" />
    <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="saranpartneritech@gmail.com" />
    <property name="subject" value="Customer Report" />
    <property name="text">
    <value>
        <![CDATA[
            Dear %s,
            Mail Content : %s
        ]]>
    </value>
</property>
</bean> -->

</beans>

和错误页

组织。springframework。豆。工厂BeanCreationException:创建名为“employeeController”的bean时出错:自动连线依赖项的注入失败;嵌套的异常是org。springframework。豆。工厂BeanCreationException:无法自动关联字段:private com。网络系统。Spring安全。服务雇员服务公司。网络系统。Spring安全。控制器。雇员控制员。雇员服务公司;嵌套的异常是org。springframework。豆。工厂BeanCreationException:创建名为“employeeServiceImpl”的bean时出错:自动连线依赖项的注入失败;嵌套的异常是org。springframework。豆。工厂BeanCreationException:无法自动关联字段:私有组织。springframework。邮政javamail。javamailssender.com。网络系统。Spring安全。服务雇员服务公司。邮件发送者;嵌套的异常是org。springframework。豆。工厂NoSuchBeanDefinitionException:找不到[org.springframework.mail.javamail.JavaMailSender]类型的符合依赖项条件的bean:至少需要1个符合此依赖项autowire候选项条件的bean。依赖项注释:{@org.springframework.beans.factory.annotation.Autowired(required=true)}。springframework。豆。工厂注释。AutowiredNotationBeanPostProcessor。org上的后处理属性值(AutowiredNotationBeanpostProcessor.java:334)。springframework。豆。工厂支持AbstractAutowireCapableBeanFactory。org上的populateBean(AbstractAutowireCapableBeanFactory.java:1214)。springframework。豆。工厂支持AbstractAutowireCapableBeanFactory。org上的doCreateBean(AbstractAutowireCapableBeanFactory.java:543)。springframework。豆。工厂支持AbstractAutowireCapableBeanFactory。在org上创建Bean(AbstractAutowireCapableBeanFactory.java:482)。springframework。豆。工厂支持AbstractBeanFactory 1美元。org上的getObject(AbstractBeanFactory.java:305)。springframework。豆。工厂支持DefaultSingletonBeanRegistry。getSingleton(DefaultSingletonBeanRegistry.java:230)位于org。springframework。豆。工厂支持抽象工厂。org上的doGetBean(AbstractBeanFactory.java:301)。springframework。豆。工厂支持抽象工厂。getBean(AbstractBeanFactory.java:196)位于org。springframework。豆。工厂支持DefaultListableBeanFactory。在org上预实例化Singleton(DefaultListableBeanFactory.java:772)。springframework。上下文支持AbstractApplicationContext。finishBeanFactoryInitialization(AbstractApplicationContext.java:834)位于org。springframework。上下文支持AbstractApplicationContext。在org上刷新(AbstractApplicationContext.java:537)。springframework。网状物上下文上下文加载器。在org上配置和刷新WebApplicationContext(ContextLoader.java:446)。springframework。网状物上下文上下文加载器。位于org的initWebApplicationContext(ContextLoader.java:328)。springframework。网状物上下文ContextLoaderListener。contextInitialized(ContextLoaderListener.java:107)位于org。阿帕奇。卡塔琳娜。果心标准上下文。listenerStart(StandardContext.java:4853)位于org。阿帕奇。卡塔琳娜。果心标准上下文。startInternal(StandardContext.java:5314)位于org。阿帕奇。卡塔琳娜。util。生命周期酶。在org上启动(LifecycleBase.java:145)。阿帕奇。卡塔琳娜。果心ContainerBase$StartChild。在org上调用(ContainerBase.java:1408)。阿帕奇。卡塔琳娜。果心ContainerBase$StartChild。在java上调用(ContainerBase.java:1398)。util。同时发生的未来任务。在java上运行(FutureTask.java:266)。util。同时发生的线程池执行器。java上的runWorker(ThreadPoolExecutor.java:1142)。util。同时发生的线程池执行器$Worker。在java上运行(ThreadPoolExecutor.java:617)。朗。丝线。运行(Thread.java:745)

共有2个答案

丁均
2023-03-14

在xml中尝试此方法,如果有效,则返回

弘阳德
2023-03-14

您的组件扫描仅包括com。网络系统。Spring安全。控制器。因此,它将无法扫描其他包以注入依赖项。启用顶部包上的组件扫描(com.websystique.springsecurity)并覆盖xml文件中的bean定义(如果需要)。

 类似资料:
  • 我需要将旧式spring项目迁移到springboot。假设下面的代码片段我必须迁移到Spring Boot风格。 在这里我的问题,如何将下面的抽象bean转换为@Bean?

  • 问题内容: 我想创建一个内部类的Spring Bean。如果我有以下内部类: 我想在我的XML配置文件中创建bean实例。 问题答案: 您不能使用点()表示法访问公共静态内部类,而应使用货币()。一个例子: 这将起作用。

  • 我需要在运行时使用动态bean工厂为不同条件创建不同类的动态bean。它是用于一般DAO实现的。如何使用Java配置实现它?? MVC初始化类 使用原型bean配置

  • 问题内容: 我有一个应用程序,在application.properties中列出了许多数据源设置。我有一个可以加载这些设置的类。现在,我想从此类中获取值,并使用它们来动态创建DataSource bean。我尝试使用和实现。但是,使用时,处理似乎发生在早期-在填充我的课程之前。如何使用Spring Boot快速读取属性并动态创建bean? 这是我的application.properties的样

  • 下面是我的application.properties的样子: 和我的ConfigurationProperties类: 在这个方法的最后,我想创建一个具有这些设置的并将其添加到ApplicationContext中。但是,如果我试图通过实现并实现来实现这一点,则属性为null,我用填充的也是一样。 使用Spring Boot创建动态数据源的最佳方法是什么?

  • 在使用HTTP远程处理的Spring应用程序中,我有一个服务façade模块,配置如下(我将代码设置为通用代码以提高清晰度): 其中,FirstService和SecondService是与现有实现的接口,此处不需要这些实现的详细信息。 我有另一个模块,它定义了39个代理(HTTPInvokerProxy工厂bean的实例),对应于通过façade公开的每个服务。 到目前为止,一切正常。 但我希望