Spring1

本文深入探讨Spring框架的核心概念,包括Spring模块、常见的注入方式、BeanFactory与ApplicationContext的区别、JDBC连接、Spring整合Struts、邮件发送等功能,并通过实际案例展示如何在项目中运用Spring进行高效开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是Spring

Spring框架是以简化J2EE应用程序开发为特定目标而建立的.
Spring是一个轻量级的IOC(DI)和AOP容器框架.(IOC:控制反转;DI:依赖注入;AOP:面向切面)

1、Spring模块

Application Context 上下文模块。
这个模块扩展了BeanFactory,添加了对I18N、应用生命周期事件以及验证的支持。另外,这个模块提供了很多企业级服务,如电子邮件、JNDI访问、EJB集成、远程调用以及定时服务,并且支持与模板框架(如Velocity和FreeMarker)的集成。
AOP模块
Spring对面向切面编程提供了丰富的支持。这个模块是为Spring应用开发切面的基础。与DI一样,AOP支持应用对象之间的松耦合。利用AOP,应用程序所关心的与其应用的对象关系不大。
JDBC抽象及DAO模块
Spring的JDBC和DAO模块把编写JDBC代码时的一些样板代码(获得连接、创建语句、处理结果、关闭连接)抽象出来,让数据库代码变得简单明了。
ORM映射集成模块
Spring MVC框架
Spring 的WEB模块

二、常见的注入方式

接口注入
构造方法注入
Setter方法注入
@Annotation反射注入

三、BeanFactory与ApplicationContext 的区别

BeanFactory
基础类型IoC容器,提供完整的IoC服务支持。
特点:默认采用延时初始化策略、启动速度快、资源占用少

ApplicationContext
ApplicationContext完全由BeanFactory扩展而来,增加了更多支持企业核心内容的功能。
特点:默认采用立即初始化策略、事件发布、国际化信息支持……

四、JDBC连接

applicationcontext.xml配置

    <!-- 连接数据库 -->
    <bean id="datasource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url"
            value="jdbc:mysql://localhost/linsenhai?useUnicode=true&amp;characterEncoding=utf8"></property>
        <property name="username" value="root"></property>
        <property name="password" value="*********"></property>
    </bean>
    <!-- jdbc模板,封装增删改查方法 -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="datasource"></property>
    </bean>
    <bean id="userdao" class="com.dao.imple.UserDaoImple">
        <property name="jdbcTemplate" ref="jdbcTemplate"></property>
    </bean>

增删改查:

public class UserDaoImple implements UserDao {

    private JdbcTemplate jdbcTemplate;

    class userMap implements RowMapper<User> {

        public User mapRow(ResultSet rs, int rowNums) throws SQLException {
            //System.out.println(rowNums);
            User user = new User();
            user.setUserId(rs.getInt("user_id"));
            user.setUserName(rs.getString("user_name"));
            user.setUserPass(rs.getString("user_pass"));
            return user;
        }

    }

    public int addUser() {
        int result = jdbcTemplate.update(
                "insert into tb_user(user_name,user_pass) values(?,?)", "***",
                "123456");
        System.out.println(result);
        return result;
    }

    public int delUser(int id){

        int result = jdbcTemplate.update("delete from tb_user where user_id=?", id);
        System.out.println(result);
        return result;

    }

    public int updateUser(User user) {

        int result = jdbcTemplate.update(
                "update tb_user set user_name=? where user_id=?",
                user.getUserName(), user.getUserId());
        return result;

    }

    public List<User> getAllUser() {

        List<User> users = jdbcTemplate.query("select * from tb_user",
                new userMap());

        return users;

    }

    public User getUser(int uid) {

        User user = jdbcTemplate.queryForObject(
                "select * from tb_user where user_id=?", new Object[] { uid },
                new userMap());
        return user;

    }

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

}

五、Spring整合struts

1、修改web.xml,在web启动的时候加载spring 容器,添加Spring 3.0 Web Libraries包。classpath的xml文件时是src下的Spring的XML配置文件,名字要相同

<!-- web启动的时候加载spring容器 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:springContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

2、导入struts-spring-2.x.jar支持包

3、注意action需要配置成为非单例

<!-- 这里的action都是单例的,必须设置为非单例 -->
<bean id="userAction" class="com.action.UserAction" scope="prototype">
    <property name="userBiz" ref="userBiz"></property>
</bean>

4、配置action时不能直接New出来

    //spring整合struts,className不能直接New出来,
    //而是要从spring容器中组件中取,和applicationContext.xml中的action的id一致
    @Action(value = "listUsers", className = "userAction", results = { @Result(name = "success", location = "/listuser.jsp") })
    public String listUsers() {

        users = userBiz.getUsers();
        return SUCCESS;

    }

5、推荐面向接口编程
6、一般采用Spring框架的都是大型项目,需分三层:dao、biz(业务层)、action;其中action调用biz层,biz层调用dao层

六、Spring中的邮件发送

1、设置邮件发送配置文件

    <!-- 邮件发送者配置 -->
    <bean name="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="username" value="********@qq.com"></property>
        <property name="password" value="*********"></property>
        <property name="port" value="465"></property>
        <property name="defaultEncoding" value="utf-8"></property>
        <property name="host" value="smtp.qq.com"></property>
        <property name="javaMailProperties">
            <props>
                <prop key="mail.debug">true</prop>
                <prop key="mail.smtp.auth">true</prop>
                <!-- 采用ssl 加密方式 -->
                <prop key="mail.smtp.starttls.enable">true</prop>

                <prop key="mail.smtp.socketFactory.class">
                    javax.net.ssl.SSLSocketFactory
                </prop>
            </props>
        </property>
    </bean>

    <bean id="mailAction" class="com.action.EmailAction" scope="prototype">
    <property name="javaMailSender" ref="mailSender"></property>
    </bean>

2、导包Spring 3.0 Misc Library、mail.jar、activation.jar,新建EmailAction

@Namespace("/")
@ParentPackage("default")
public class EmailAction extends ActionSupport{

    private JavaMailSender javaMailSender;

    @Action(value="send",className="mailAction",results={@Result(name="success",location="/success.jsp")})
    public String send(){

        //简单邮件发送
        SimpleMailMessage message = new SimpleMailMessage();

        message.setTo("********@qq.com");
        message.setFrom("********@qq.com");
        message.setText("hello world");
        message.setSubject("FirstEmail");

        javaMailSender.send(message);

        return SUCCESS;

    }

    public void setJavaMailSender(JavaMailSender javaMailSender) {
        this.javaMailSender = javaMailSender;
    }
}
        //支持HTML、内嵌图片、附件
        MimeMessage message = javaMailSender.createMimeMessage();

        try {
            MimeMessageHelper helper = new MimeMessageHelper(message, true);

            helper.setTo("********@qq.com");
            helper.setFrom("*******@qq.com");
            helper.setText("<html><body><h1>hello world</h1> <img src='cid:s'/></body></html>",true);
            FileSystemResource res = new FileSystemResource(new File("f://s.jpg"));
            helper.addInline("s", res);

            FileSystemResource file = new FileSystemResource(new File("f://s.zip"));
            helper.addAttachment("sfile.zip", file);

            javaMailSender.send(message);
        } catch (MessagingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值