Spring研究 (2) 添加Bean

在上次的MVC基础上,我们准备给Controller增加Model,为此创建一个Account Bean Class:

public class Account implements java.io.Serializable {
private String username;
private String password;

public String getUsername() { return this.username; }
public void setUsername(String username) { this.username = username; }

public String getPassword() { return this.password; }
public void setPassword(String password) { this.password = password; }
}

然后修改SpringappController:

public class SpringappController implements Controller {
private Account account;
public Account getUserAccount() { return this.account; }
public void setUserAccount(Account account) { this.account = account; }

public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
return new ModelAndView("view.jsp", "model", account.getUsername());
}
}

为了向SpringappController注入Bean,我们修改配置文件springapp-servlet.xml:

<!-- 申明一个Account Bean -->
<bean id="adminAccount" class="Account">
<property name="username">
<value>administrator</value>
</property>
<property name="password">
<value>1234567</value>
</property>
</bean>
<bean id="springappController" class="SpringappController">
<!-- 注入到Controller -->
<property name="userAccount">
<ref bean="adminAccount" />
</property>

</bean>

OK,运行Ant,然后启动Tomcat,结果输出:

Result: administrator

注入成功!但是在Controller中放一个Account肯定是不合逻辑的,我们准备做一个用户登录功能,为此创建一个AccountManager Bean:

public class AccountManager implements java.io.Serializable {
Account getAccount(String username, String password) {
// TODO...
Account account = new Account();
account.setUsername(username);
account.setPassword(password);
return account;
}
}

然后把SpringappController改为:

public class SpringappController implements Controller {
private AccountManager manager;
public AccountManager getManager() { return this.manager; }
public void setManager(AccountManager manager) { this.manager = manager; }


public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
String username = request.getParameter("username");
String password = request.getParameter("password");
return new ModelAndView("view.jsp", "model",
manager.getAccount(username, password).getUsername());
}
}

修改springapp-servlet.xml:

<bean id="accountManager" class="AccountManager" />
<bean id="springappController" class="SpringappController">

<property name="manager">
<ref bean="accountManager" />
</property>

</bean>

编译,运行,输入:http://localhost:8080/springmvc/hello.c?username=xuefeng&password=1234

结果显示:

Result: xuefeng

OK,现在只要创建一个html form,Post到Controller然后在AccountManager中验证Username和Password就可以了。

springbean生命周期源码非常庞大,但是可以简要概括如下: 1. 初始化阶段:在容器启动时,Spring会根据配置文件或注解等方式创建bean的定义。然后,Spring会实例化这些bean,并为其设置属性值和依赖关系。 2. 属性注入阶段:在实例化和初始化bean之后,Spring会为bean注入属性值。这可以通过setter方法、构造函数或字段注入来实现。 3. Aware接口回调阶段:在属性注入之后,Spring会调用实现了Aware接口的方法,以便让bean能够感知到容器的存在和其他相关信息。 4. BeanPostProcessor阶段:在初始化bean之前和之后,Spring会调用BeanPostProcessor接口的方法,以允许开发人员在bean的创建过程中添加自定义逻辑。这些方法可以用来修改bean的属性值、校验属性等。 5. 初始化方法阶段:在BeanPostProcessor阶段之后,Spring会调用bean的初始化方法。这个方法可以由开发人员定义,并且可以在配置文件或注解中指定。 6. DisposableBean和destroy-method阶段:在容器关闭或销毁bean时,Spring会调用DisposableBean接口的方法或者配置的destroy-method方法,以便执行一些清理工作和释放资源的操作。 这只是对bean生命周期源码的简要描述,实际情况要复杂得多。要深入了解bean生命周期的源码,需要详细研究Spring框架的源代码并跟踪其中的方法调用和逻辑流程。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [spring bean的生命周期源码解析](https://blog.csdn.net/weixin_43863021/article/details/105407050)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值