在某些时候,我们需要根据业务需求来动态的建立某些类的多个实例,而这些类是由用户自定义的。例如:在网络编程时,对客户端每次向服务端发起的TCP请求,在服务端都会建立Socket,用户对该Socket进行包装,形成类A。因此对于客户端的每次请求在服务端都有与A相应的实例。
但是类A又依赖于多个属性,是否需要队列来处理Socket,A所对应的Socket端口是多少。因此问题是:如何在服务端创建A的实例,然后将已定义好的属性注入到A中?
解决方法之一:
(1)基于Spring,将创建A的类称为W,作为Spring的一个bean;
(2)A的“包名+类名”作为W的String属性;
(3)A所依赖的队列和Socket端口等属性定义为一个属性集合Map,该Map作为W的一个属性。
在W运行时,对于每个客户端向服务端发起的请求,都会利用反射建立A的实例,然后将W的属性Map通过调用A的setMap方法将这些属性传递到A的实例中。
缺点:(1)W包含了对A的属性的依赖,破坏职责单一性。
(2)在实现A时,需要实现setMap方法,处理由A传递过来的参数。分散A的业务职责。
(3)Map的key在编译时不能进行检查。
有没有更好的方法解决这个问题呢?
但是类A又依赖于多个属性,是否需要队列来处理Socket,A所对应的Socket端口是多少。因此问题是:如何在服务端创建A的实例,然后将已定义好的属性注入到A中?
解决方法之一:
(1)基于Spring,将创建A的类称为W,作为Spring的一个bean;
(2)A的“包名+类名”作为W的String属性;
(3)A所依赖的队列和Socket端口等属性定义为一个属性集合Map,该Map作为W的一个属性。
在W运行时,对于每个客户端向服务端发起的请求,都会利用反射建立A的实例,然后将W的属性Map通过调用A的setMap方法将这些属性传递到A的实例中。
缺点:(1)W包含了对A的属性的依赖,破坏职责单一性。
(2)在实现A时,需要实现setMap方法,处理由A传递过来的参数。分散A的业务职责。
(3)Map的key在编译时不能进行检查。
有没有更好的方法解决这个问题呢?