字面量
| # 方式一:可以在实体类中直接设置为空 |
| private String oname=""; |
| |
| # 方式二:在bean.xml中配置如下 |
| <property name="address"> |
| <null/> |
| </property> |
| # 实体类 |
| public class Book { |
| |
| private String bname; |
| |
| private String bauthor; |
| |
| private String address; |
| |
| public void setBname(String bname) { |
| this.bname = bname; |
| } |
| public void setBauthor(String bauthor) { |
| this.bauthor = bauthor; |
| } |
| |
| public void setAddress(String address) { |
| this.address = address; |
| } |
| |
| public void testDemo() { |
| System.out.println(bname+"::"+bauthor+"::"+address); |
| } |
| |
| } |
| |
| # bean.xml |
| <bean id="book" class="com.ychen.spring.model.Book"> |
| <property name="bname" value="易筋经"></property> |
| <property name="bauthor" value="达摩老祖"></property> |
| <property name="address"> |
| <null/> |
| </property> |
| </bean> |
| |
| # 测试方法 |
| @Test |
| public void testBook1() { |
| ApplicationContext context = |
| new ClassPathXmlApplicationContext("bean1.xml"); |
| Book book = context.getBean("book", Book.class); |
| System.out.println(book); |
| book.testDemo(); |
| } |
| |
| # 测试 |
| com.ychen.spring.model.Book@19932c16 |
| 易筋经::达摩老祖::null |

| # 实体 |
| public class Book { |
| |
| private String bname; |
| |
| private String bauthor; |
| |
| private String address; |
| |
| public void setBname(String bname) { |
| this.bname = bname; |
| } |
| public void setBauthor(String bauthor) { |
| this.bauthor = bauthor; |
| } |
| |
| public void setAddress(String address) { |
| this.address = address; |
| } |
| |
| public void testDemo() { |
| System.out.println(bname+"::"+bauthor+"::"+address); |
| } |
| |
| } |
| |
| # bean.xml |
| <bean id="book" class="com.ychen.spring.model.Book"> |
| <property name="bname" value="易筋经"></property> |
| <property name="bauthor" value="达摩老祖"></property> |
| <property name="address"> |
| <value><![CDATA[<<南京>>]]></value> |
| </property> |
| </bean> |
| |
| # 测试方法 |
| @Test |
| public void testBook1() { |
| ApplicationContext context = |
| new ClassPathXmlApplicationContext("bean1.xml"); |
| Book book = context.getBean("book", Book.class); |
| System.out.println(book); |
| book.testDemo(); |
| } |
| |
| # 测试 |
| com.ychen.spring.model.Book@305ffe9e |
| 易筋经::达摩老祖::<<南京>> |
| |
| Process finished with exit code 0 |
注入外部bean
| # 编写持久层接口 |
| public interface UserDao { |
| |
| public void update(); |
| |
| } |
| |
| # 实现持久层接口 |
| public class UserDaoImpl implements UserDao { |
| |
| @Override |
| public void update() { |
| System.out.println("dao update..........."); |
| } |
| |
| } |
| |
| # 业务层注入持久层 |
| public class UserService { |
| |
| public void add() { |
| System.out.println("service add..............."); |
| |
| UserDao userDao = new UserDaoImpl(); |
| userDao.update(); |
| } |
| |
| } |
| # 编写持久层接口 |
| public interface UserDao { |
| |
| public void update(); |
| |
| } |
| |
| # 实现持久层接口 |
| public class UserDaoImpl implements UserDao { |
| |
| @Override |
| public void update() { |
| System.out.println("dao update..........."); |
| } |
| |
| } |
| |
| # 编写业务层 |
| public class UserService { |
| |
| private UserDao userDao; |
| |
| public void setUserDao(UserDao userDao) { |
| this.userDao = userDao; |
| } |
| |
| public void add() { |
| System.out.println("service add..............."); |
| userDao.update(); |
| } |
| |
| } |
| |
| # xml配置中构建对象(使用2个bean标签构建对象),并用ref属性注入外部bean |
| <bean id="userService" class="com.ychen.spring.service.UserService"> |
| <!--注入 userDao 对象 |
| name 属性:类里面属性名称 |
| ref 属性:创建 userDao 对象 bean 标签 id 值 |
| --> |
| <property name="userDao" ref="userDaoImpl"></property> |
| </bean> |
| <bean id="userDaoImpl" class="com.ychen.spring.dao.UserDaoImpl"></bean> |
| |
| # 测试方法 |
| @Test |
| public void testBean1() { |
| |
| ApplicationContext context = |
| new ClassPathXmlApplicationContext("bean1.xml"); |
| |
| UserService userService = context.getBean("userService", UserService.class); |
| userService.add(); |
| } |
| |
| # 控制台 |
| service add............... |
| dao update........... |
- 使用xml配置内部bean注入,即是在1个bean中直接注入另一个bean
| # 编写部门实体类 |
| public class Dept { |
| |
| private String dname; |
| |
| public void setDname(String dname) { |
| this.dname = dname; |
| } |
| |
| @Override |
| public String toString() { |
| return "Dept{" + |
| "dname='" + dname + '\'' + |
| '}'; |
| } |
| |
| } |
| |
| # 编写员工实体类 |
| public class Emp { |
| |
| private String ename; |
| |
| private String gender; |
| |
| |
| private Dept dept; |
| |
| |
| public Dept getDept() { |
| return dept; |
| } |
| |
| public void setDept(Dept dept) { |
| this.dept = dept; |
| } |
| |
| public void setEname(String ename) { |
| this.ename = ename; |
| } |
| |
| public void setGender(String gender) { |
| this.gender = gender; |
| } |
| |
| public void add() { |
| System.out.println(ename+"::"+gender+"::"+dept); |
| } |
| |
| } |
| |
| # 配置bean.xml |
| <bean id="emp" class="com.ychen.spring.bean.Emp"> |
| <!--设置两个普通属性--> |
| <property name="ename" value="lucy"></property> |
| <property name="gender" value="女"></property> |
| <!--设置对象类型属性--> |
| <property name="dept"> |
| <bean id="dept" class="com.ychen.spring.bean.Dept"> |
| <property name="dname" value="安保部"></property> |
| </bean> |
| </property> |
| </bean> |
| |
| # 编写测试方法 |
| @Test |
| public void testBean2() { |
| |
| ApplicationContext context = |
| new ClassPathXmlApplicationContext("bean1.xml"); |
| |
| Emp emp = context.getBean("emp", Emp.class); |
| emp.add(); |
| } |
| |
| # 测试 |
| lucy::女::Dept{dname='安保部'} |
| |
| Process finished with exit code 0 |
级联赋值
| # 编写部门实体类 |
| public class Dept { |
| |
| private String dname; |
| |
| public void setDname(String dname) { |
| this.dname = dname; |
| } |
| |
| @Override |
| public String toString() { |
| return "Dept{" + |
| "dname='" + dname + '\'' + |
| '}'; |
| } |
| |
| } |
| |
| # 编写员工实体类 |
| public class Emp { |
| |
| private String ename; |
| |
| private String gender; |
| |
| |
| private Dept dept; |
| |
| |
| public Dept getDept() { |
| return dept; |
| } |
| |
| public void setDept(Dept dept) { |
| this.dept = dept; |
| } |
| |
| public void setEname(String ename) { |
| this.ename = ename; |
| } |
| |
| public void setGender(String gender) { |
| this.gender = gender; |
| } |
| |
| public void add() { |
| System.out.println(ename+"::"+gender+"::"+dept); |
| } |
| |
| } |
| |
| # 配置bean.xml |
| <bean id="emp" class="com.ychen.spring.bean.Emp"> |
| <!--设置两个普通属性--> |
| <property name="ename" value="lucy"></property> |
| <property name="gender" value="女"></property> |
| <!--级联赋值--> |
| <property name="dept" ref="dept"></property> |
| </bean> |
| <bean id="dept" class="com.ychen.spring.bean.Dept"> |
| <property name="dname" value="财务部"></property> |
| </bean> |
| |
| # 编写测试方法 |
| @Test |
| public void testBean2() { |
| |
| ApplicationContext context = |
| new ClassPathXmlApplicationContext("bean1.xml"); |
| |
| Emp emp = context.getBean("emp", Emp.class); |
| emp.add(); |
| } |
| |
| # 测试 |
| lucy::女::Dept{dname='财务部'} |
| |
| Process finished with exit code 0 |
| # 编写部门实体类 |
| public class Dept { |
| |
| private String dname; |
| |
| public void setDname(String dname) { |
| this.dname = dname; |
| } |
| |
| @Override |
| public String toString() { |
| return "Dept{" + |
| "dname='" + dname + '\'' + |
| '}'; |
| } |
| |
| } |
| |
| # 编写员工实体类,注意需要生成dept的get方法,后面bean.xml中进行级联注入时会用到 |
| public class Emp { |
| |
| private String ename; |
| |
| private String gender; |
| |
| |
| private Dept dept; |
| |
| |
| public Dept getDept() { |
| return dept; |
| } |
| |
| public void setDept(Dept dept) { |
| this.dept = dept; |
| } |
| |
| public void setEname(String ename) { |
| this.ename = ename; |
| } |
| |
| public void setGender(String gender) { |
| this.gender = gender; |
| } |
| |
| public void add() { |
| System.out.println(ename+"::"+gender+"::"+dept); |
| } |
| |
| } |
| |
| # 配置bean.xml |
| <bean id="emp" class="com.ychen.spring.bean.Emp"> |
| <!--设置两个普通属性--> |
| <property name="ename" value="lucy"></property> |
| <property name="gender" value="女"></property> |
| <!--级联赋值--> |
| <property name="dept" ref="dept"></property> |
| <property name="dept.dname" value="技术部"></property> |
| </bean> |
| <bean id="dept" class="com.ychen.spring.bean.Dept"> |
| <!-- <property name="dname" value="财务部"></property>--> |
| </bean> |
| |
| # 编写测试方法 |
| @Test |
| public void testBean2() { |
| |
| ApplicationContext context = |
| new ClassPathXmlApplicationContext("bean1.xml"); |
| |
| Emp emp = context.getBean("emp", Emp.class); |
| emp.add(); |
| } |
| |
| # 测试 |
| lucy::女::Dept{dname='技术部'} |
| |
| Process finished with exit code 0 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术